Freescale MC9S12XDP512双核处理器的串口程序,带操作系统UCOSII。有需要的可以下载。
单片机源程序如下:
- #include "includes.h"
- extern word Period[8],Duty[8];
- #define TASK_STK_SIZE 128 /* static size */
- OS_STK TaskStartStk[TASK_STK_SIZE]; /*定义任务的堆栈空间*/
- OS_STK TaskStartStkA[TASK_STK_SIZE]; /*定义任务A的堆栈空间*/
- OS_STK TaskStartStkB[TASK_STK_SIZE]; /*定义任务B的堆栈空间*/
- OS_STK TaskStartStkC[TASK_STK_SIZE]; /*定义任务C的堆栈空间*/
- OS_STK TaskStartStkD[TASK_STK_SIZE]; /*定义任务D的堆栈空间*/
- OS_STK TaskStartStkE[TASK_STK_SIZE]; /*定义任务D的堆栈空间*/
- OS_STK TaskStartStkF[TASK_STK_SIZE]; /*定义任务D的堆栈空间*/
- void TaskStart(void *data);
- void TaskStartA(void *data); /*声明任务A的函数原型*/
- void TaskStartB(void *data); /*声明任务B的函数原型*/
- void TaskStartC (void *pdata);
- void TaskStartD (void *pdata);
- void TaskStartE (void *pdata);
- void TaskStartF (void *pdata);
- void DATA_Init();
- #define ROUTE_INTERRUPT(vec_adr, cfdata) \
- INT_CFADDR= (vec_adr) & 0xF0; \
- INT_CFDATA_ARR[((vec_adr) & 0x0F) >> 1]= (cfdata)
-
- static void SetupXGATE(void) {
- XGVBR= (unsigned int)(void*__far)(XGATE_VectorTable - XGATE_VECTOR_OFFSET);
- ROUTE_INTERRUPT(TIMER_OVERFLOW, 0x86); /* RQST=1 and PRIO=1 */
- ROUTE_INTERRUPT(CAPTURE_CH0, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH1, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH2, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH3, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH4, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH5, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH6, 0x87);
- ROUTE_INTERRUPT(CAPTURE_CH7, 0x87);
- ROUTE_INTERRUPT(ATD0, 0x81);
- ROUTE_INTERRUPT(ATD1, 0x81);
- ROUTE_INTERRUPT(SPI0, 0x84);
- ROUTE_INTERRUPT(SPI1, 0x84);
- ROUTE_INTERRUPT(RTI, 0x85);
- ROUTE_INTERRUPT(MODULUS_UNDERFLOW, 0x82);
- XGMCTL= 0xFBC1; /* XGE | XGFRZ | XGIE */
- }
- void main (void)
- {
-
- DisableInterrupts;
- DATA_Init();
- MCU_Init();
- SetupXGATE();
- OSInit(); /* initial UCOS-II 系统初始化函数*/
- OSTaskCreate(TaskStart , (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 8);
- OSTaskCreate(TaskStartA, (void *)0, &TaskStartStkA[TASK_STK_SIZE - 1], 3);
- OSTaskCreate(TaskStartB, (void *)0, &TaskStartStkB[TASK_STK_SIZE - 1], 4);
- OSTaskCreate(TaskStartC, (void *)0, &TaskStartStkC[TASK_STK_SIZE - 1], 5);
- OSTaskCreate(TaskStartD, (void *)0, &TaskStartStkD[TASK_STK_SIZE - 1], 6);
- OSTaskCreate(TaskStartE, (void *)0, &TaskStartStkE[TASK_STK_SIZE - 1], 7);
- OSTaskCreate(TaskStartF, (void *)0, &TaskStartStkF[TASK_STK_SIZE - 1], 9);
-
- EnableInterrupts;
-
- OSStart(); /* 开始多任务调度!该函数永远不会返回*/
- }
-
- void TaskStart(void *pdata)
- {
- volatile static byte yy = 0;
- pdata = pdata;
-
- //RTICTL = 0xBF; /*160000 * /16MHz=10Ms*/
- RTICTL = 0xAF; /*80000 * /8MHz=10Ms*/
- CRGINT_RTIE = 1; /*Enabe Interrupt*/
-
- for(;;)
- {
- watchdog_clr();
- //display_ad();
- //=======================================================
- if(test>0)
- {
- if(test>1)
- {
- induction_switch_test();
- }
- /*else
- {
- shift_sensor_test();
- } */
- }
- //yys003();
- //=======================================================
- OSTimeDly(80); /*让运行中的任务进入延时等待10*20=200ms*/
- }
-
- }
- /*测试数据的初始化---------------------*/
- void DATA_Init(){
-
-
- }
- int key5,key4,key4,key3,key2,key1,key0;
- int ta,tb,tc,td,te,tf;
- int flash,f,onoff_flag;
- /*定义任务A--------------------等待测试开始信号*/
- void TaskStartA (void *pdata)
- {
-
- pdata = pdata;
-
- for(;;)
- {
- watchdog_clr();
- DDRA=0XFF;
- ta++;
- OSTimeDly(1); /*让运行中的任务进入等待状态655300ms*/
- }
- }
- int err;
- /*定义任务B-----------比较模块的通道参数等,*/
- void TaskStartB (void *pdata)
- {
- pdata = pdata;
- for(;;)
- {
- watchdog_clr();
-
- /*if(tb==2)
- {
- while(1)
- {
- PORTA=0;
- if(PORTA_PA0==0) err=0; else
- {
- err=1;
- while(1);
- }
- PORTA=0xFF;
- if(PORTA_PA0==1) err=0; else
- {
- err=1;
- while(1);
- }
-
- }
-
- }*/
- tb++;
- OSTimeDly(3); /*让运行中的任务进入等待状态200ms*/
- }
- }
- /*定义任务C-----------获取待测板数据并比较测试结果*/
- void TaskStartC (void *pdata)
- {
- pdata = pdata;
-
- for(;;)
- {
- watchdog_clr();
- tc++;
- OSTimeDly(4); /*让运行中的任务进入等待状态200ms*/
- }
- }
- word cc;
- /*定义任务D------------发送数据至CAN口,到电脑*/
- void TaskStartD (void *pdata)
- {
- pdata = pdata;
- for(;;)
- {
- watchdog_clr();
- //CAN_sr();
- //SCISend('A');
-
-
- //UART_sr();
- td++;
- OSTimeDly(1); /*让运行中的任务进入等待状态60ms*/
- }
- }
- /*定义任务/E---------------------发送数据至串口,到电脑*/
- void TaskStartE (void *pdata)
- {
-
- pdata = pdata;
-
- for(;;)
- {
- watchdog_clr();
- //UART_sr();
- te++;
- OSTimeDly(1); /*让运行中的任务进入等待状态100*10ms*/
- }
- }
- /*定义任务F*/
- void TaskStartF (void *pdata)
- {
- pdata = pdata;
-
- for(;;)
- {
- watchdog_clr();
- //Ad5668Out(0,0,2048); //控制57档B 待测板的AD10
- if(tf>=1) UART_sr();
-
- tf++;
- OSTimeDly(0); /*让运行中的任务进入等待状态0ms*/
- }
- }
复制代码
所有资料51hei提供下载:
串口发送XDP512 两个串口同时发送.rar
(1.77 MB, 下载次数: 17)
|