前面已经完成了UCOS-II到mini2440的移植
现在来进行基本的应用程序设计
已经完成4个LED程序,用来测试移植是否成功
下面把裸奔的触摸屏程序移植上来。
1.创建Touch任务
(1)、设置好任务堆栈长度
- #define TaskStkLengh 1024
(2)、设置好任务优先级
- #define NormalTaskPrio 5
- #define Task0Prio NormalTaskPrio+1
(3)、设置好任务堆栈
- OS_STK TaskTouchStk[Task2StkLengh];
然后声明
- void TaskLCD(void *pdata);
最后在main任务中创建任务:
- OSTaskCreate(TaskTouch,(void *)0,&TaskTouchStk[Task2StkLengh-1],Task2Prio);
- </pre></blockquote></blockquote><pre name="code" class="html">void TaskTouch(void *pdata)
- {
- #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
- OS_CPU_SR cpu_sr;
- #endif
- OS_ENTER_CRITICAL();
- Touch_Init();
- OS_EXIT_CRITICAL();
- while(1)
- {
- Uart_Printf("\nEnter Task Touch\n");
- rGPBDAT&=LED3_ON; //LED亮
- OSTimeDly(400); //延时20个节拍
- rGPBDAT|=LED3_OFF; //LED灭
- OSTimeDly(400); //延时20个节拍
- }
- }
下面是touch的驱动程序,这里千万要注意一点,在UCOS-II下用中断函数不要加__irq,即static void AdcTsIntHandle(void)。下面贴出初始化函数与中断函数。
- void Touch_Init(void)
- {
- rADCDLY = 50000;
- rADCCON = PRESCALE_EN | PRSCVL(9);
- wait_down_int(); /* 进入"等待中断模式",等待触摸屏被按下 */
- pISR_ADC = (int)AdcTsIntHandle; // 设置ADC中断服务程序
- rINTMSK &= ~BIT_ADC; // 开启ADC总中断
- rINTSUBMSK &= ~(BIT_SUB_TC); // 开启INT_TC中断,即触摸屏被按下或松开时产生中断
- }
- static void AdcTsIntHandle(void)
- {
- #if OS_CRITICAL_METHOD == 3
- OS_CPU_SR cpu_sr;
- #endif
- OS_ENTER_CRITICAL();
- if(rADCDAT0&0x8000)
- {
- rSUBSRCPND|=BIT_SUB_TC;
- ClearPending(BIT_ADC);//清A/D中断,开启A/D中断屏蔽
- //Uart_Printf("\nStylus Up!!\n");
- wait_down_int(); /* 进入"等待中断模式",等待触摸屏被按下 */
- //rADCTSC&=0xff; // Set stylus down interrupt bit
- }
- else
- {
- mode_auto_xy(); /* 进入自动(连续) X/Y轴坐标转换模式 */
- rADCDLY = 40000; //延时
- /* 设置位[0]为1,启动A/D转换
- * 注意:ADCDLY为50000,PCLK = 50MHz,
- * 要经过(1/50MHz)*50000=1ms之后才开始转换X坐标
- * 再经过1ms之后才开始转换Y坐标
- */
- rADCCON |= ADC_START;
- while(rADCCON & 0x1); //检查A/D转换是否开始
- while(!(rADCCON & 0x8000)); //等待A/D转换的结束
- while(!(rSRCPND & (BIT_ADC))); //判断A/D中断的悬挂位
- xdata=(rADCDAT0&0x3ff);
- ydata=(rADCDAT1&0x3ff);
- // 打印X、Y坐标值
- wait_up_int();//再次设置等待中断模式,这一次是判断触笔的抬起
- //设置触笔抬起中断
- Uart_Printf("xdata = %d, ydata = %d\n", xdata, ydata);
- rSUBSRCPND|=BIT_SUB_TC;
- ClearPending(BIT_ADC);//清A/D中断,开启A/D中断屏蔽
- OS_EXIT_CRITICAL();
- }