摘要:
本文讲述了uC/OS在MSP430-169LCD的移植,重点放在测试用例,并附上源码。
最近小老板给了我MSP430-169LCD板和MSP-FET430UIF调试器,让我将UCOS移植上去(用于课堂演示uC/OS)。我先把官方的Demo code跑通,再移植UCOS。
一、移植uC/OS
关于uC/OS在MSP430的移植可以参考文档[2],并结合邵贝贝翻译的《嵌入式实时操作系统uCOSII》。我网上找到了一份uC/OS-II在MSP430移植好的源码,几乎不用修改。
二、应用程序
主要是针对MSP430-169LCD板子修改下应用程序,本例子旨在用两个任务控制灯的闪烁,任务A让灯亮,任务B让灯灭,两任务交替运行,从而达到灯闪烁的效果。
2.1 LED对应的管脚
MSP430-169LCD有两个LED,一个用于电源指示,另一个可编程的。欲控制该LED,首先得找到与该LED相关的引脚。通过原理图(可以从[1]下载),可以得知该LED对应的引脚是P2.1,如下图红色标记所示:

图1 MSP430-169LCD的LED示意图
2.2 应用程序
任务A,让LED亮,源代码如下:
- void TaskStartA(void *pdata)
- {
- pdata = pdata; /*无任何意义,防止编译器报警 */
- WDTCTL = WDT_MDLY_32; /*设置时钟节拍间隔为32ms*/
- IE1 |= BIT0; /* 开看门狗定时器中断*/
- P2SEL &= BIT1; //引脚功能选择器
- P2DIR |= BIT1; //方向寄存器,1为输出模式
- while(1)
- {
- P2OUT |= BIT1; //LED灭亮
- OSTimeDly(10); //延时10个时钟节拍,任务挂起,等待延时结束(此时任务B执行)
- }
- }
任务B,让LED灭,源代码如下:
- void TaskStartB(void *pdata)
- {
- pdata = pdata; /*无任何意义,防止编译器报警*/
- WDTCTL = WDT_MDLY_32; /*设置时钟节拍间隔为32ms*/
- IE1 |= BIT0; /*开看门狗定时器中断*/
- P2SEL &= BIT1; //引脚功能选择器
- P2DIR |= BIT1; //方向寄存器,1为输出模式
- while(1)
- {
- P2OUT &= ~BIT1; //LED灭
- OSTimeDly(20); //延时20个时钟节拍,任务挂起,等待延时结束(此时任务B执行)
- }
- }
参考资料:
[1] MSP430-169LCD:http://www.olimex.com/dev/msp-169lcd.html
[3] 工程源码
ucos_msp430f149.rar
[4]MSP430-169LCD原理图
msp430-169lcd-sch.gif