金牌会员
- 积分
- 1649
- 威望
- 810
- 贡献
- 379
- 兑换币
- 404
- 注册时间
- 2012-10-11
- 在线时间
- 230 小时
- 毕业学校
- 山东理工大学
|
今天刚把编码器采集所需的PIT和TIM模块搞定,然后果断的分享了
/***************************************************************
总线频率88M,PWM频率250HZ,定时器每0.1s去查看脉冲累加器的值
然后将脉冲数反映到端口B的LED上。
***************************************************************/
#include <hidef.h>
#include "derivative.h"
void PA_init() {
PACTL_PAEN=0; // 禁止脉冲累加功能
PACTL_PAMOD=0; // 事件计数模式
PACTL_PEDGE=0; // 下降沿触发计数
PACTL_PAOVI=0; // 脉冲数据寄存器溢出中断关闭
PACTL_PAI=0; // 脉冲输入中断关闭
PACNT=0x0000; // 脉冲数据寄存器清零
TCTL3|=0X40; // 通道7上升沿捕捉
TIE=0X00; // 所有的通道寄存器没有使能
TIOS_IOS7=0; // 通道7为输入捕捉
PACTL_PAEN=1; // 脉冲计数允许
}
void SetBusCLK_88M(void)
{
CLKSEL=0X00; // disengage PLL to system
PLLCTL_PLLON=1; // turn on PLL
SYNR =0xc0 | 0x0a;
REFDV=0x80 | 0x01;
POSTDIV=0x00; // pllclock=2*osc*(1+SYNR)/(1+REFDV)=176MHz;
_asm(nop); // BUS CLOCK=88M
_asm(nop);
while(!(CRGFLG_LOCK==1)); // when pll is steady ,then use it;
CLKSEL_PLLSEL =1; // engage PLL to system;
}
void PIT_init() {
PITCFLMT=0X00; // 禁用PIT模块
PITCE|=0X01; // 定时器0通道使能位置1
PITMUX_PMUX0=0; // 连接微定时器0与定时器0
PITFLT|=0X01; // 定时器0强制装载位置1
PITMTLD0=219; // 微定时器0装载寄存器 220
PITLD0=39999; // 定时器0装载寄存器 40000
// 220*40000/88000000=0.1s
PITINTE|=0X01; // 允许定时器0中断使能
PITTF|=0X01; // 定时器0中断标志位清零
PITCFLMT=0X80; // 使能PIT模块
}
void PWM_init() {
PWME_PWME5 = 0; // 先禁止各通道输出
PWMCTL_CON45 = 1; // 通道45级联成16位PWM
PWMPRCLK_PCKA = 2; // 预分频系数为A 2,总线频率,即22MHZ
PWMSCLA = 1; // SA_CLK = A_CLK / (2*1) ==11MHz
PWMCLK_PCLK5 = 1; // 通道选 clock SA做时钟源
PWMCNT45=0; // 45计数器清零
PWMCAE_CAE5=0; // 选择输出模式为左对齐输出模式
PWMPOL_PPOL5=1; // 先输出高电平,计数到DTY时,反转电平
PWMPER45=44000; // PWM=11M/44000=250HZ,周期为4ms
PWMDTY45=16500; // 初值设定为90度
PWME_PWME5 = 1;
}
void main(void) {
SetBusCLK_88M(); // 时钟初始化
PA_init(); // 脉冲累加捕捉初始化
PIT_init(); // 定时器0初始化
PWM_init(); // PWM初始化
DDRB=0XFF; //端口初始化
EnableInterrupts; //开总中断
for(;;) {
}
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0_ISR(void){
PACTL_PAEN=0; // 输入脉冲计数禁止
PORTB=PACNT;
PACNT=0X0000; // 脉冲数据寄存器清零
PACTL_PAEN=1; // 输入计数允许
PITTF_PTF0=1; // 清除PIT0的标记
}
#pragma CODE_SEG DEFUALT
|
|