/**********************************************
***********************************************/
#include #include "derivative.h" /* derivative-specific definitions */ #include //1M=1006080 //40MHz BUS_CLOCK /* #define SynrDefine 0x53 #define RefdvDefine 0x07 //时钟频率等于2*晶振频率*(SYNR0+1)/(REFDV0+1) #define SciDefine 0x106 //串行总线频率=时钟频率/(16*SCI0BDL) */ //----------------------------------------------------- //80MHz BUS_CLOCK #define SynrDefine 0xD3 #define RefdvDefine 0x03 //时钟频率等于2*晶振频率*(SYNR0+1)/(REFDV0+1) #define SciDefine 0x20c //串行总线频率=时钟频率/(16*SCI0BDL) #define WAITTIME 100000 //启动延时时间 #define SpeedInterrupt 1000 //速度周期采样时间,定时1000 * 0.01ms = 10ms #define AdInterrupt 100 //Ad周期采样时间,定时100 * 0.01ms = 1ms int SpeedNow=0; //速度采样初始化 int sensor_ad[5]=0; //i=0~4,AD数据采样结果 //----------------------------------------------------- //92MHz BUS_CLOCK /* #define SynrDefine 0xD6 #define RefdvDefine 0x03 //时钟频率等于2*晶振频率*(SYNR0+1)/(REFDV0+1) #define SciDefine 0x25a //串行总线频率=时钟频率/(16*SCI0BDL) */ //----------------------------------------------------- /****************************************************************** *函数名:Wait_Time *入口参数无 *出口参数: 无 *功能描述: 简单延迟程序 *******************************************************************/ void Wait_Time(ulong cnt) { unsigned char a,b; while(--cnt) { for(b=4;b>0;b--) for(a=248;a>0;a--); } } //----------------------------------------------------- /****************************************************************** *函数名:PLL_Init *入口参数SNNR寄存器值,REFDV0寄存器值 *出口参数: 无 *功能描述:使用PLLCLK,时钟频率=2*晶振频率*(SYNR0+1)/(REFDV0+1) *******************************************************************/ void PLL_Init(byte SYNR0,byte REFDV0) { CLKSEL=0x00; //disable pll; CLKSEL_PLLSEL = 0; PLLCTL_PLLON = 0; SYNR = SYNR0; // REFDV = REFDV0; PLLCTL = 0xc0; //0xC0 CME=1,PLLON=1 PLLCTL_PLLON = 1; while(!CRGFLG_LOCK); CLKSEL_PLLSEL = 1; return; } //----------------------------------------------------- /****************************************************************** *函数名:SCI_Init *入口参数SCI0BD寄存器值 *出口参数: 无 *功能描述:使用SCI_Init,串行总线频率=时钟频率/(16*SCI0BDL) *******************************************************************/ static void SCI_Init(int SCI0) { SCI0CR1 =0x00; SCI0CR2 =0x2c; //enable Receive Full Interrupt,RX enable,Tx enable SCI0BD =SCI0; //SCI0BDL=busclk/(16*SCI0BDL) //busclk 8MHz, 9600bps,SCI0BD=0x34 //busclk 16MHz, 9600bps,SCI0BD=0x68 //busclk 24MHz, 9600bps,SCI0BD=0x9C //busclk 32MHz, 9600bps,SCI0BD=0xD0 //busclk 40MHz, 9600bps,SCI0BD=0x106 } //----------------------------------------------------- /****************************************************************** *函数名:Sci0Tx *入口参数SCI0DRL寄存器值 *出口参数: 无 *功能描述: 发送串口数据 *******************************************************************/ void Sci0Tx(unsigned char text) { unsigned char temp; temp=SCI0SR1; /*clear flag*/ //发送前判断SC0DR是否处于忙状态。SC0DR.7=0:处于忙状态 while (!SCI0SR1_TDRE); /* wait for output buffer empty */ while(!SCI0SR1_TC); //等待数据发送结束 SCI0DRH=0; SCI0DRL=text; } //----------------------------------------------------- /****************************************************************** *函数名:Sci0Rx *入口参数无 *出口参数: 串口数据 *功能描述: 接收串口数据 *******************************************************************/ byte Sci0Rx(void) { byte result,temp; temp=SCI0SR1; /*clear flag*/ if((temp&0x20)>0) result=SCI0DRL; return result; } //----------------------------------------------------- /****************************************************************** *函数名:PWM_Init *入口参数无 *出口参数: 无 *功能描述: 脉宽调制初始化( BUS_CLOCK=80M ),1口马达,6口舵机 *******************************************************************/ void PWM_Init(void) { PWME=0x00; //禁止PWM模块 PWMCAE=0x00; //全部左对齐输出 PWMPOL=0xFF; //全部为先输出高电平再输出低电平 PWMCLK=0xFF; //01级联-马达,6-舵机预分频 //其中CLOCK A或CLOCK SA控制0,1,4,5通道的PWM,CLOCK B或CLOCK SB控制2,3,6,7通道的PWM PWMPRCLK=0x22; //CLOCK SA与CLOCK SB都进行4分频 //设置频率A=bus clock/4=20MHz,B=bus clock/4=20MHz PWMSCLA=0x01; //CLOCK SA进行10分频,即20MHZ/2/1=10MHZ PWMSCLB=0x05; //CLOCK SB进行10分频,即20MHZ/2/5=2MHZ PWMCTL_CON01=1; //01级联 PWMPER01=2500; //输出频率的算法:SA clock/2500=4KHz; PWMDTY01=1250; //通道01初始化占空比50% PWMPER6=2000; //输出频率的算法:SB clock/2000=100Hz; PWMDTY6=1000; //通道6初始化占空比50% PWME=0x22; //打开01,6通道(只需开通高位即可) } //----------------------------------------------------- /****************************************************************** *函数名:PIT_Init *入口参数无 *出口参数: 无 *功能描述: 时钟周期中断初始化程序 *******************************************************************/ void PIT_Init(void) { PITCFLMT_PITE=0; //关闭PIT //微定时器的装载寄存器 PITMTLD0= 80-1;//8位定时器初值设定。80分频,在80MHzBusClock下,为0.1MHz,即10us=0.01ms //PITMTLD1= 80-1;//8位定时器初值设定。80分频,在80MHzBusClock下,为0.1MHz,即10us=0.01ms //PITMTLD1= 160-1;//8位定时器初值设定,160分频,在16MHz的总线时钟频率下,为0.1MHz,即1us=0.01ms //定时器的装载寄存器 //中断定时基准时间设定 PITLD0 = SpeedInterrupt - 1 ;//16位定时器初值设定。PITTIME*0.01MS,定时1000 * 0.01ms = 10ms PITLD1 = AdInterrupt - 1 ;//定时100*0.01ms = 1ms PITCE_PCE0=1;//使能通道0 PITCE_PCE1=1;//使能通道0 PITMUX_PMUX0=0;//0:相应16位定时器与微时基0连接 PITMUX_PMUX1=0;//0:相应16位定时器与微时基0连接 //PITMUX_PMUX1=1;//1:相应16位定时器与微时基1连接 PITINTE_PINTE0=1;//开通PIT0定时器的溢出中断 PITINTE_PINTE1=1;//开通PIT1定时器的溢出中断 PITCFLMT_PITE=1; //使能PIT } //----------------------------------------------------- /****************************************************************** *函数名:ECT_Init *入口参数无 *出口参数: 无 *功能描述: 脉冲累加计数,PTT7口,电路接法:需要上拉电阻5.1千欧姆 *******************************************************************/ void ECT_Init(void) { TSCR1 = 0x00; //禁止时钟 TIOS = 0x7f; //设置通道7为输入捕捉功能 PACTL=0x50; PACNT=0x00; TSCR2 = 0x00; TCTL3 = 0x40; //设置通道7上升沿捕捉 TSCR1=0x80; //允许时钟计数 } //----------------------------------------------------- /****************************************************************** *函数名:AD_Init *入口参数无 *出口参数: 无 *功能描述: AD模块转换程序 *******************************************************************/ void AD_init() { ATD0CTL1=0b00000000; // 8位转换 //ATD0CTL1=0b00100000; // 10位转换 //ATD0CTL1=0b01000000; // 12位转换 ATD0CTL2=0x40; //上电,标志位快速清零,忽略外部触发,中断禁止。 ATD0CTL3 = 0b10101000; //转换序列长度为7,结果寄存器数据右对齐 //S8C S4C S2C S1C 转换序列长度 // 0 0 0 0 8 ATD0CTL3 = ob10000000 // 0 0 0 1 1 ATD0CTL3 = ob10001000 // 0 0 1 0 2 ATD0CTL3 = ob10010000 // 0 0 1 1 3 ATD0CTL3 = ob10011000
上一篇:飞思卡尔单片机PWM模块分析(3)
下一篇:飞思卡尔单片机PWM模块分析(2)
推荐阅读最新更新时间:2024-11-22 12:49
推荐帖子
- 基于AD9854的信号发生器设计
- 本帖最后由paulhyde于2014-9-1503:07编辑基于AD9854的信号发生器设计基于AD9854的信号发生器设计本帖最后由paulhyde于2014-9-1503:07编辑不介绍了,,自己下载来看吧,,,,,,,本帖最后由paulhyde于2014-9-1503:07编辑先下来看看本帖最后由paulhyde于2014-9-1503:07编辑基于AD9854的信号发生器设计基于AD9854
- gerdy 电子竞赛
- STM32定时器中断为什么不能直接在while中判断中断标志位
- 为什么这个不行while(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET){MCU_1_LED=!MCU_1_LED;}而这么设置就行?while(1){if(Flag==1){MCU_1_LED=!MCU_1_LED;Flag=0;}}STM32定时器中断为什么不能直接在while中判断中断标志位要想进入定时器中
- shijizai stm32/stm8
- 求教在WinCE中ini文件的写法
- 各位高手,我想在*.ini文件里面把画面上的按钮大小,字体等属性写出来。请问该怎么写?格式是什么?求教在WinCE中ini文件的写法这个代码可以参考一下:#defineMAX_LEN1000///用于CString,使用CString类前最好估算整个操作过程中可能出现的最大///字符长度,用GetBuffer(MAX_LEN)来创建缓冲区。这将避免频繁创建、删除///缓冲区,提高了效率,也避免了内存碎片。CStr
- ardentyears WindowsCE
- 自己整理的1602显示子函数
- #include1602.h#includedelay.h/**********************************************函数名:write_dat(uchardat,ucharorder)函数参数:uchardat,ucharorder函数功能:写数据(1)、指令(0)**********************************************/voidwrite_dat(uchar
- 狼牙小帅 51单片机
- MSP430学习资料
- MSP430学习资料很好顶顶,各种顶,超级顶,真是太好了!!!研究中呵呵,很不错。学习者谢谢楼主啊灰常灰常的感谢。谢谢楼主的无私奉献内牛满面。。。。。感谢楼主
- hxqhit 微控制器 MCU
- 多核DSP C6678 SRIO借口调试记录
- 设计的板子到了SRIO调试阶段了,在板子上,一片V6和两片6678通过4XSRIO互联,中间没有Switch,总算搞定了相互之间的通信。首先,感谢Ti论坛提供的SRIO程序范例,但是其硬件平台是EVM板,更多的只能用于loopback测试,但是可以在其基础上修改。1.初始化DSP的SRIO,主要是对SerDes进行配置,然后是Lane和Speed的配置,最后需要等待FPGA的LinK建立,我们在建立时候碰到一点困难,每次建立并不都是4X,一直没有找到问题,我
- Aguilera DSP 与 ARM 处理器