Chinaunix首页 | 论坛 | 博客
  • 博客访问: 100953
  • 博文数量: 49
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-03 19:38
文章分类

全部博文(49)

文章存档

2016年(37)

2015年(12)

我的朋友

分类: 嵌入式

2016-01-25 21:43:53

摘要:

    本文讲述了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亮,源代码如下:

  1. void TaskStartA(void *pdata)
  2. {
  3.   pdata = pdata; /*无任何意义,防止编译器报警 */

  4.   WDTCTL = WDT_MDLY_32; /*设置时钟节拍间隔为32ms*/
  5.   IE1 |= BIT0; /* 开看门狗定时器中断*/

  6.   P2SEL &= BIT1; //引脚功能选择器
  7.   P2DIR |= BIT1; //方向寄存器,1为输出模式

  8.   while(1)
  9.   {
  10.     P2OUT |= BIT1; //LED灭亮
  11.     OSTimeDly(10); //延时10个时钟节拍,任务挂起,等待延时结束(此时任务B执行)
  12.   }
  13. }

任务B,让LED灭,源代码如下:

  1. void TaskStartB(void *pdata)
  2. {
  3.   pdata = pdata; /*无任何意义,防止编译器报警*/

  4.   WDTCTL = WDT_MDLY_32; /*设置时钟节拍间隔为32ms*/
  5.   IE1 |= BIT0; /*开看门狗定时器中断*/

  6.   P2SEL &= BIT1; //引脚功能选择器
  7.   P2DIR |= BIT1; //方向寄存器,1为输出模式

  8.   while(1)
  9.   {
  10.     P2OUT &= ~BIT1; //LED灭
  11.     OSTimeDly(20); //延时20个时钟节拍,任务挂起,等待延时结束(此时任务B执行)
  12.   }
  13. }


参考资料:

[1] MSP430-169LCD:http://www.olimex.com/dev/msp-169lcd.html

[2]  uCOS在MSP430的移植功能详细说明.pdf   

[3] 工程源码 ucos_msp430f149.rar   

[4]MSP430-169LCD原理图 msp430-169lcd-sch.gif   

阅读(785) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~