在IAR中移植ucos到msp430_第1页
在IAR中移植ucos到msp430_第2页
在IAR中移植ucos到msp430_第3页
在IAR中移植ucos到msp430_第4页
在IAR中移植ucos到msp430_第5页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、昨天搞定了 ucos在stm32上的移植,今天继续移植 msp430,我用的是IAR6.3编译环境。相 比stm32来讲我觉得这个移植更简单一点,官方代码给的已经很好了,所需要的修改很少很少。开始正题。准备材料在TI官网上下载430的固件库,我用的是 msp430f5528的板子,下载的是F5xx_F6xx_Core_Lib 地址 下载后解压得到-|DJX|女年心 德岩§ 5(1)就一底心 工具|整。后正-, 零 变快Hitt 益 |匚 M-vr/nL:出i中以站睥 nh mr Wy >«河mi把#mlLm必重帝名电八又外头密由适个空忡吴 莹割堂r?r件美 部址文gg

2、贫由成特唤 A3LJa吐皇卉睥米式发幽该 二艾件死内omr呷y丑片饮个苴件羹VariJOCooLilr-*-.K* -j- Mt 5- lr.±u.7 27 KB: J Htxfkjljil 1 oatka. .iHtl t . 广?6&5,法_史11己0 顷在ucos官网上下载移植 430版本的ucos,地址下载安装后得到建立和配置工程建立工程目录,并在工程目录下建立F5xx_F6xx_Core_Lib和ucosii两个目录将msp430固件库slaa448bF5xx_F6xx_Core_Lib目录下的所有文件拷贝到工程目录下的 F5xx_F6xx_Core_Lib文件夹中

3、,这个是 msp430cpu操作的一些函数。我们要初始化 cpu时钟 用。在在工程目录的 ucosii下建立ports和source两个目录用来存放 ucos系统文件将 ucos安装目录 MicriumSoftwareuCOS-IIPortsMSP430XIARMSP430x5xx 下的所有文件复制到工程目录下的 ports文件夹中将ucos安装目录MicriumSoftwareuCOS-IISource 下的所有文件复制到工程目录下的source文件夹中建立main函数文件,建一个文本文档取名为test.c我们还要借鉴ucos安装的例程给的两个系统配置文件MicriumSoftwareEva

4、IBoardsTIMSP-EXP430F5438IARuCOS-II目录里的 app_cfg.h 和os_cfg.h。将这两个文件拷贝的工程根目录下。app_cfg.h是用户进程的一些配置,比如进程的保先级,进程堆栈的大小等等。os_cfg.h是系统称一些配置,可以开关系统的一些功能,尽量裁剪掉不用的功能可以减少cpu的开销。下面建立一个 msp430的空工程并向工程中添加刚才的文件,得到目录如下配置这个工程选取相应的芯片型号添加工程包含目录$PROJ_DIR$F5xx_F6xx_Core_Lib$PROJ_DIR$PROJ_DIR$ucosiiports$PROJ_DIR$ucosiisou

5、rce仿真模式改成debug保存然后开始建立任务app_cfg.h中的所有内容,写如建立4个任务每个任务闪一个灯和一个启动任务,首先删掉 下代码:#ifndef _APP_CFG_H_(OS_LOWEST_PRIO - 4)#define _APP_CFG_H#define OS_TASK_TMR_PRIO/* task stack size */#define STARTUP_TASK_STK_SIZE 128#define TASK1_STK_SIZE 128#define TASK2_STK_SIZE 128#define TASK3_STK_SIZE 128#define TASK4_

6、STK_SIZE 128#define STARTUP_TASK_PRIO 4#define TASK1_PRIO 5#define TASK2_PRIO 6#define TASK3_PRIO 7#define TASK4_PRIO 8#endif这个就是建立的四个任务和一个启动任务的优先级和堆栈大小下面是任务代码写在 test.c中。OS_STK startup_stkSTARTUP_TASK_STK_SIZE;OS_STK task1_stkTASK1_STK_SIZE;OS_STK task2_stkTASK2_STK_SIZE;OS_STK task3_stkTASK3_STK_SI

7、ZE;OS_STK task4_stkTASK4_STK_SIZE;unsigned char os_err;static void task1(void *p_arg)for (;)P1OUT |= BIT1;OSTimeDly(500);P1OUT &= BIT1;OSTimeDly(500);static void task2(void *p_arg)for (;)P1OUT |= BIT2;OSTimeDly(500);P1OUT &= BIT2;OSTimeDly(500);static void task3(void *p_arg)for (;)P1OUT |= B

8、IT3;OSTimeDly(500);P1OUT &= BIT3;OSTimeDly(500);static void task4(void *p_arg)(for (;)(P1OUT |= BIT4;OSTimeDly(500);P1OUT &= BIT4 ;OSTimeDly(500); static void startup(void *p_arg)(P1DIR |= BIT1+BIT2+BIT3+BIT4;/ P1.0 set as outputOS_CPU_SysTickInit();#if (OS_TASK_STAT_EN > 0)/-统计任务初始化函数OSS

9、tatInit();#endifos_err = OSTaskCreate(task1,/ 任务 1(void *)0,/不带参数(OS_STK *)&task1_stkTASK1_STK_SIZE - 1堆栈指针(INT8U)5);优先级os_err = OSTaskCreate(task2,/ 任务 2(void *)0,/不带参数(OS_STK *)&task2_stkTASK2_STK_SIZE - 1堆栈指针(INT8U)6);/优先级os_err = OSTaskCreate(task3,/ 任务 3(void *)0,/不带参数(OS_STK *)&tas

10、k3_stkTASK3_STK_SIZE - 1堆栈指针(INT8U)7);/ 优先级/os_err = OSTaskCreate(task4,/ 任务 4(void *)0,/不带参数(OS_STK *)&task4_stkTASK4_STK_SIZE - 1堆栈指针 (INT8U)8);OSTaskDel(OS_PRIO_SELF);我们用的ucos系统时钟是看门狗做的,我们要初始化看门狗滴答如下函数void OS_CPU_SysTickInit()WDTCTL = (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS_4); /*20M/32768=1.6384ms */

11、SFRIE1 |= 1;/* Enable WDT interrupts*/看门狗的中断函数已经写好了在os_cpu_a.s43中,下面是初始化cpu时钟我们吧系统时钟初始化到 这个有直接的关系,最好能保证看门狗可以设置到 时时间比较直观)函数如下:#include <msp430f5528.h>#include "HALPMM.h"可以自己看一下。20M用的是内部PLL, (ucos时钟滴答跟1ms的时间,当我们用 OSTimeDly函数#include "HAL_UCS.h”#include "ucosii.h"#define

12、SYS MCLK FREQ 20000000void Init_Clock(void) SELECT_FLLREF(SELREF_REFOCLK);SELECT_ACLK(SELA_REFOCLK);Init_FLL(SYS_MCLK_FREQ/1000, SYS_MCLK_FREQ/32768);/ Set DCO FLL reference = REFO/ Select REFO as ACLK source void InitSys() /*PMM 全部关闭 */ DISABLE_SVSL();/ SVS Low side is turned offDISABLE_SVML();/ Mo

13、nitor low side is turned offDISABLE_SVMH();/ Monitor high side is turned offDISABLE_SVSH();/ SVS High side is turned on/DISABLE_SVSH_RESET();/ Enable POR on SVS Eventwhile (PMMIFG & SVSMLDLYIFG) = 0)&&(PMMIFG & SVSMHDLYIFG) = 0); / SVSH turns off in LPM3,power-save CLEAR_PMM_IFGS();_disable_interrupt();/ Disable global interruptsSetVCore(PMMCOREV_3);/ USB core requires the VCore setto 1.8 volt, independ of CPU clock frequencyInit_Clock();_enable_interrupt();/ enable global interrupts下面是main函数:直

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论