飞思卡尔智能车HCS12芯片学习笔记

编译器:Freescale CodeWarrior,其中的上横线都未标出。如IRQ字母上面本来应该有一个横线。

一:I/O

普通IO口一般就用porta和portb,主要就下面两句:
DDRB=0xff;//设置为输出
PORTB=0x00;//置为低电平

二:Interrupt

S12系列配备一个标记为IRQ的外部中断,该引脚出现低电平或者电平下降沿时,则会产生中断请求。
IRQCR_IRQE:0表示低电平有效,1表示下降沿有效。
IRQCR_IRQEN:使能。表示IRQ中断允许。
主要就是下面这么一个中断响应程序:其它中断也是参照着写:
#pragma CODE_SEG __NEAR_SEG NON_BANKED//跟内存分配有关,具体暂时不是很清楚
void interrupt 6 IRQ_INT(void) {;//IRQ和PE1同一个管脚。在中断向量中第7个,所以interrupt 6。
  DDRB=0xff;//中断响应后LED灯亮的程序。
  PORTB=0xf0;
}
#pragma CODE_SEG DEFAULT  

三:PWM

PWM:脉冲调制信号
概述:
之前写脉冲信号的时候可以用定时中断用CPU输在在普通IO口上高低电平来实现。
现在S12芯片为此特地分出的一个模块,更加便捷,而且使用时极少占用CPU资源。
思路:
设计一个PWM信号,关键其实无非就是周期、占空比。

例程:
void PWM_init(void){
  PWME=0x00;//先禁止以便设置
  PWMPRCLK=0x07;//CLOCKA设置为总线时钟128分频
  PWMSCLA=0;//SA的分频因子设置为256
  PWMCLK=0x01;//通道0选择SA作为PWM时钟
  PWMPER0=250;//周期寄存器
  PWMDTY0=125;//占空比寄存器设置50%
  PWMPOL=0x01;//方波先高后低
  PWMCAE=0x00;//左对齐输出
  PWMCTL=0x00;//不级联
  PWME=0x01;//使能通道0
}
这个例程的结果就是差不多每秒产生一个方波,可以直接在led灯上看到闪烁。

四:ECT

ECT(enhanced capture timer module):
增强型定时器
概述:
ECT和一般的定时器不同主要在于增加脉冲累加器通道数量并设置了保存寄存器;
前者增强正负脉冲宽度的测量能力;后者放宽对输入捕捉(IC)事件响应时间的要求。


五:SCI

全双工串行通信接口

SCIDRH/L :
发送或接受的数据寄存器

SCIBD:
16位寄存器波特率寄存器

SCI波特率=SCI模块时钟/(16*BR)
BR是SCIBD寄存器bit0~12的值
比如:要设置波特率为9600.
则对SCIBD直接赋值为BR=SCI模块时钟/16/9600,即可。



未完待续。




你可能感兴趣的:(timer,IO,Module,编译器)