MC9S12XEP100處理器can總線接收程序
源程序:
- /*---------------------------------------------------------*/
- /************************************************************
- 飛翔科技MC9S12XEP100汽車電子開發板
- E-mail: 2008f.d@163.com
- ************************************************************/
- /*---------------------------------------------------------*/
- #include <hidef.h> /* common defines and macros */
- #include "derivative.h" /* derivative-specific definitions */
- #include "CAN.h"
- #include "LCD.h"
- #define LEDCPU PORTK_PK4
- #define LEDCPU_dir DDRK_DDRK4
- #define BUS_CLOCK 32000000 //總線頻率
- #define OSC_CLOCK 16000000 //晶振頻率
- char *xianshi[3] = {
- "飛翔科技開發板",
- "接收到的數據為:",
- };
- #define ID 0x0001 //發送標識符
- #define data_len_TX 7 //發送數據長度
- unsigned char k;
- unsigned char senddata[8] = {'F','R','E','E','F','L','Y',0}; //發送的數據
- struct can_msg msg_send, msg_get;
- unsigned char datain=0;
- /*************************************************************/
- /* 初始化鎖相環 */
- /*************************************************************/
- void INIT_PLL(void)
- {
- CLKSEL &= 0x7f; //set OSCCLK as sysclk
- PLLCTL &= 0x8F; //Disable PLL circuit
- CRGINT &= 0xDF;
-
- #if(BUS_CLOCK == 40000000)
- SYNR = 0x44;
- #elif(BUS_CLOCK == 32000000)
- SYNR = 0x43;
- #elif(BUS_CLOCK == 24000000)
- SYNR = 0x42;
- #endif
- REFDV = 0x81; //PLLCLK=2×OSCCLK×(SYNDIV+1)/(REFDIV+1)=64MHz ,fbus=32M
- PLLCTL =PLLCTL|0x70; //Enable PLL circuit
- asm NOP;
- asm NOP;
- while(!(CRGFLG&0x08)); //PLLCLK is Locked already
- CLKSEL |= 0x80; //set PLLCLK as sysclk
- }
- /************************************************************/
- /* 初始化ECT模塊 */
- /************************************************************/
- void initialize_ect(void){
- ECT_TSCR1_TFFCA = 1; // 定時器標志位快速清除
- ECT_TSCR1_TEN = 1; // 定時器使能位. 1=允許定時器正常工作; 0=使主定時器不起作用(包括計數器)
- ECT_TIOS = 0xff; //指定所有通道為輸出比較方式
- ECT_TCTL1 = 0x00; // 后四個通道設置為定時器與輸出引腳斷開
- ECT_TCTL2 = 0x00; // 前四個通道設置為定時器與輸出引腳斷開
- ECT_DLYCT = 0x00; // 延遲控制功能禁止
- ECT_ICOVW = 0x00; // 對應的寄存器允許被覆蓋; NOVWx = 1, 對應的寄存器不允許覆蓋
- ECT_ICSYS = 0x00; // 禁止IC及PAC的保持寄存器
- ECT_TIE = 0x00; // 禁止所有通道定時中斷
- ECT_TSCR2 = 0x07; // 預分頻系數pr2-pr0:111,,時鐘周期為4us,
- ECT_TFLG1 = 0xff; // 清除各IC/OC中斷標志位
- ECT_TFLG2 = 0xff; // 清除自由定時器中斷標志位
- }
- /************************************************************/
- /* 在液晶上顯示接收到的數據 */
- /************************************************************/
- void play_data(void)
- {
- unsigned char l;
- write_command(0x8A);
- for(l=0;l<msg_get.len;l++)
- write_Data(msg_get.data[l]);
- }
- /*************************************************************/
- /* 中斷接收函數 */
- /*************************************************************/
- #pragma CODE_SEG __NEAR_SEG NON_BANKED
- void interrupt CAN_receive(void)
- {
- if(MSCAN0GetMsg(&msg_get))
- {
- // 接收新信息
- if(msg_get.id == ID && (!msg_get.RTR))
- {
- LEDCPU = ~LEDCPU;
- datain=1;
- }
- }
- else
- {
- for(;;);
- }
- }
- #pragma CODE_SEG DEFAULT
- /*************************************************************/
- /* 主函數 */
- /*************************************************************/
- void main(void) {
- DisableInterrupts;
- INIT_PLL();
- initialize_ect();
- INIT_CAN0();
- INIT_PORT();
- LEDCPU_dir=1;
- …………限于本文篇幅 余下代碼請從5 1黑電子論壇下載附件…………
復制代碼
下載:
CAN接收.rar
(545.79 KB, 下載次數: 81)
2017-5-7 16:01 上傳
點擊文件名下載附件
|