我在smartarm上写了一个简单的实验,主要实现以下功能:ucos只建立一个任务,向PC发送字母w,当pc机连续向arm发送8个字节后,arm中断向pc机发送h<br />在实验过程中,w字母是收到了,但是不管我连续向arm发送多少数字字母,都没有受到中断,我已经在strtup.s中开了中断<br /> ;设置系统模式堆栈<br /> MSR CPSR_c, #0x5f<br />程序如下:<br />#include "config.h"<br />#include "stdlib.h"<br /><br />#define TaskStkLengh 64 //定义用户任务0的堆栈长度 <br />OS_STK TaskStk [TaskStkLengh]; //定义用户任务0的堆栈<br /><br />void Task0(void *pdata); //Task0 任务0<br />void VICIn();<br />/*********************************************************************************************************<br />** 主程序<br />********************************************************************************************************/<br />int main (void)<br />{<br /> VICIn(); <br /> OSInit (); <br /> OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2); <br /> OSStart (); <br /> return(0); <br />}<br />/*********************************************************************************************************<br />** Task0 任务0<br />********************************************************************************************************/<br /><br />void Task0 (void *pdata)<br />{<br /> pdata = pdata;<br /> TargetInit ();<br /> VICIn();<br /> while (1)<br /> {<br /> U0THR='w';<br /> while((U0LSR&0x40)==0);<br /> OSTimeDly(10);<br /> }<br />}<br /> /*********************************************************************************************************<br />** VIC初始化<br />********************************************************************************************************/ <br />void VICIn(void)<br />{<br /> extern void IRQ_UART0(void);<br /> VICIntSelect = 0x00000000;//均为向量中断<br /> VICVectCntl0 = 0x26;//UART0分配为向量0号中断<br /> VICVectAddr0 = (int)IRQ_UART0;//UART0中断服务子程序入口<br /> VICIntEnable = 1<<7;//允许UART0中断<br /> <br /> U0FCR = 0x81; // 使能FIFO,并设置触发点为8字节<br /> U0IER = 0x01; // 允许RBR中断,即接收中断<br />}<br />/*********************************************************************************************************<br />** 中断服务子程序<br />********************************************************************************************************/ <br />void __irq IRQ_UART0(void)<br />{<br /> if(0x04==(U0IIR & 0x0F))<br /> {<br /> U0THR='h';<br /> }<br /> VICVectAddr = 0;//中断处理结束<br />}<br /> <br /> <br />/*********************************************************************************************************<br />** End Of File<br />********************************************************************************************************/<br /> |
|