金牌会员
- 积分
- 1532
- 威望
- 708
- 贡献
- 426
- 兑换币
- 22
- 注册时间
- 2010-5-8
- 在线时间
- 199 小时
|
本帖最后由 lsa4100 于 2011-12-14 11:04 编辑
回复 1# 无敌快车
void PIT_Init(void) //函数作用:PIT(定时中断)初始化
{
/**********************************
配置中断优先级。本程序开四个中断:PT0行中断、PT1场中断、PIT0定时中断(读取测速值)、SCI0串口中断,中断级别分别为7、6、5、4,依次下降。
PT0 对应中断向量地址为0x0000FFEE,地址倒数第二位为E,于是写入INT_CFADDR = 0xE0;地址倒数第一位为E即14,设置位为14/2=7,于是INT_CFDATA7 = 0x07;
PT1 对应中断向量地址为0x0000FFEC,地址倒数第二位为E,于是写入INT_CFADDR = 0xE0;地址倒数第一位为C即12,设置位为12/2=6,于是INT_CFDATA6 = 0x06;
PIT0对应中断向量地址为0x0000FF7A,地址倒数第二位为7,于是写入INT_CFADDR = 0x70;地址倒数第一位为A即10,设置位为10/2=5,于是INT_CFDATA5 = 0x05;
SCI0对应中断向量地址为0x0000FFD6,地址倒数第二位为D,于是写入INT_CFADDR = 0xD0;地址倒数第一位为6 ,设置位为 6/2=3,于是INT_CFDATA3 = 0x04;
**********************************/
INT_CFADDR = 0xE0; //中断向量号
INT_CFDATA7 = 0x07; //PT0行中断优先级定义:level 7(最高)
INT_CFADDR = 0x70; //中断向量号
INT_CFDATA6 = 0x06; //PT1场中断优先级定义:level 6
INT_CFADDR = 0x70; //中断向量号
INT_CFDATA5 = 0x05; //PIT定时器中断优先级定义:level 5
INT_CFADDR = 0x70; //中断向量号
INT_CFDATA3 = 0x04; //SCI0串口中断优先级定义:level 4
PITCFLMT_PITE = 0; //先停止PIT
/***********************/
PITCE_PCE0 = 1; //使能PIT频道0(共4个频道)
PITMUX_PMUX0 = 0; //使用子计数器0(8位)计时
PITMTLD0 = 200; //8位子计数器初值(相当于分频器)
PITLD0 = 4000; //16位计数器初值:总计时: 4000×200×0.0125us约为10ms。80MHz主频。。。
PITCFLMT_PFLMT = 1; //使能定时器
PITFLT_PFLT0 = 1; //读取计数器初值
PITINTE_PINTE0 = 1; //使能中断
PITTF_PTF0 = 1;
/*****************/
PITCFLMT_PITE = 1; //使能PIT
}
/*********************************************************************
函数名: TIM_Init
作用: 初始化输入捕捉计数器以及行场中断程序
输入管脚: IOC7(PT7)
输出管脚: None
备注: 类似于外部中断,可以计测速脉冲数,保存在PACNT寄存器中
*********************************************************************/
void TIM_Init(void) //函数作用:IOC(输入捕捉)初始化,输入端口PT7
{
TIOS=0x00; //设置外部输入捕捉管脚PT7为输入,PT0,1 通道也为输入
TSCR1_TFFCA = 0; //清空定时器标志位,以进行正常的操作
PACTL = 0x40; //使能输入捕捉的计数功能,下降沿捕捉,关闭溢出中断和输入捕捉中断
PACNT = 0; //计数器清零
TCTL4_EDG0B = 0; //外部中断口PT0为行中断,优先级最高,设置为上升沿触发
TCTL4_EDG0A = 1;
TCTL4_EDG1B = 1; //外部中断口PT1为场中断,优先级第二,设置为下降沿触发
TCTL4_EDG1A = 0;
TFLG1_C0F=1; // 清行中断标志
TFLG1_C1F=1; // 清场中断标志
TIE_C0I = 1; // 开行中断
TIE_C1I = 1; //开场中断
TSCR1_TEN=1; //允许定时器正常工作。这个语句必须要,虽然脉冲可以脱离时钟,但是系统中的时钟是不能不开启的
} |
|