历史上的今天
今天是:2025年06月07日(星期六)
2020年06月07日 | TinyOS在MSP430F2618上移植(二)之USCI
2020-06-07 来源:eefocus
第一篇文章《TinyOS在MSP430F2618上移植(一)》早在5月份就已写好,间隔了2个月才有时间写这篇文章,期间一直忙于SPI、UART接口的测试以及FLASH、LCD的移植。本文主要叙述MSP430F2618单片机USCI的移植。
对比MSP430F1611与MAP430F2618,可以看出两者最大的不同点在于后者提供了更丰富的外围接口,分为A,B两组,其中A组的功能有UART、IrDA ,B组提供SPI、I2C功能,另外A组也可以配合B组中提供的SCK作为SPI接口。在A,B组中又分为两个独立组,A0/1,B0/1。
2618中特殊功能寄存器也做了改动,去除了模块使能寄存器1、2(module enable register 1 and 2)ME1以及ME2,特殊功能器IE2,IFG2中仅包含A0和B0相应的接收/发送中断使能以及中断状态位,而A1和B1相应的中断使能以及中断状态则有寄存器UC1IE和UC1IFG相应位实现。所以,首先得修改McuSleepC.nc中出现的ME1,ME2,在getPowerState()中使用UCB0/1CTL1 和UCA0/1CTL1替代,即当USCI使用时钟源为UCSSEL_1(ACLK)时,返回当前的电源状态为LPM1。
修改HplMsp430GeneralIOC.nc中引脚配置,去除所有宏定义(否则编译时出现引脚未定义错误),重新配置接口(主要是USCI接口)。
修改msp430usart.h。根据2618中相应寄存器修改数据结构,定义数据类型msp430_ucactl0_t,msp430_ucactl1_t(Async_mode)和msp430_ucbctl0_t, msp430_ucbctl1_t (Sync_mode),并增加相应的DEFINE_UNION_CAST宏,实现定义的结构体类型与整型之间相互转换。定义用于SPI接口配置的数据类型msp430_spi_config_t,其中包括16bit的波特率UBR,8bit的UCTL0以及8bit的UCTL1寄存器相应位的定义。定义用于UART接口配置的数据类型msp430_uart_config_t,其中包括16bit的波特率UBR,8bit的UMCTL ,8bit的UCTL0以及8bit的UCTL1寄存器相应位的定义。
回到usart目录下,由于低版本MSP430系列仅采用两个分组1,2,而2618中使用了A,B分组,而每一个组中又包括两个分组1,2。分别增加HplMsp430UsartA0C.nc,HplMsp430UsartA0P.nc,HplMsp430UsartA1C.nc,HplMsp430UsartA1P.nc,HplMsp430UsartB0C.nc,HplMsp430UsartB0P.nc,HplMsp430UsartB1C.nc,HplMsp430UsartB1P.nc。上述文件使用的接口HplMsp430GeneralIO分别连接到不同的接口上实现不同的功能。在文件msp430regtypes.h中增加相应数据类型的定义,即定义寄存器的数据类型,然后在上述P文件中使用MSP430REG_NORACE。
由于A和B两组共用同一类中断,如A0/B0使用USCIAB0RX_VECTOR接收中断向量,那么在TOSH_SIGNAL(USCIAB0RX_VECTOR)中应判断触发此中断的是哪一组,在中断中通过判断此时中断标志位和中断使能位指向哪一组,当这两个条件都成立时,读相应的数据寄存器,并触发Interrupts接口的rxDone。删除与ME1/2相关的语句,修改相应的寄存器选项。
实现SPI功能。增加Msp430SpiA0C.nc,Msp430SpiA1C.nc,Msp430SpiB0C.nc,Msp430SpiB1C.nc这4个文件供外部接口使用SPI功能时连接使用。在使用SPI功能时可以使用DMA模式,增加Msp430SpiDmaA0/1P.nc,Msp430SpiDmaB0/1P.nc,Msp430SpiNoDmaA0/1P.nc,Msp430SpiNoDmaB0/1P.nc共8个文件,实现上述4个C文件向上层连接,最终由Msp430SpiDmaP.nc,Msp430SpiNoDmaP.nc两个文件实现接口提供的功能。而向下层连接是通过增加Msp430UsartB0C.nc,Msp430UsartB1C.nc,这两个文件连接Hpl层,并且连接到资源仲裁层,通过增加Msp430UsartShareB0P.nc,Msp430UsartShareB1P.nc实现。
与实现SPI功能相似,UART功能由下述方法实现。增加Msp430Uart0/1C.nc, Msp430Uart0/1P.nc,其中Msp430Uart0/1C.nc用于外部接口使用UART功能时连接。向上层连接通过Msp430Uart0/1P.nc连接到Msp430UartP.nc,该文件实现UART接口的功能。而向下层连接是通过增加Msp430UsartA0C.nc,Msp430UsartA1C.nc,这两个文件连接Hpl层,并且连接到资源仲裁层,通过增加Msp430UsartShareA0P.nc,Msp430UsartShareA1P.nc实现。
通过上述配置即可完成USCI的移植,通过编译过程中出现的错误再做相应的修改。
使用SPI时通过连接模块Msp430SpiA0C.nc,Msp430SpiA1C.nc,Msp430SpiB0C.nc,Msp430SpiB1C.nc,选择其中的一组,最后提供一个组件使得上述4个文件中的Msp430SpiConfigure接口连接到此组件,实现配置SPI功能。
使用UART时通过连接模块Msp430Uart0C.nc, Msp430Uart1C.nc,选择其中的一组,最后提供一个组件使得上述2个文件中的Msp430UartConfigure接口连接到此组件,实现配置UART功能。
最后,TinyOS2.1.1默认的时钟源选择的是DCO默认设置,其频率在1.1MHZ左右。在MoteClockC文件中取消对MoteClockP。Msp430ClockInit -> Msp430ClockC语句的注释,意义在于使用本平台下的时钟初始化函数。修改MoteClockP文件中setupDcoCalibrate函数,开启XT2时钟源,并将MCLK和SMCLK都设置为以XT2为时钟源。并根据需要修改initClock函数,可以直接注释掉前两句。
修改后的msp430请搜索资源 TinyOS MSP430F2618移植。
史海拾趣
|
ECU的历史 发动机电子控制装置,也称作发动机控制器(ECU),于20世纪70年代诞生。当时,由于石油危机,人们正在寻找一种提高燃油经济性的方法,他们想要找出一种能够使发动机在更为清洁和污染更少的条件下运行的方法。当时的工程师运用一种叫做燃 ...… 查看全部问答> |
|
1 引言 为了以更低的功耗获得更高的速度和更佳的性能,要求电源电压越来越低,瞬态性能指标越来越高,因此对开关电源提出了越来越高的要求。用原有的电路拓扑及整流方式已不能满足现在的要求,为了适应IC芯片发展的需要,人们开始研 ...… 查看全部问答> |
|
提供电子,单片机,软件类题目毕业设计代做(北京) 标签:电子 本团队提供电子工程专业,通信专业,计算机专业,控制专业,自动化专业,测控专业,检测专业,,等各类电子,软件类专业毕业设计。 主要承 ...… 查看全部问答> |
|
关于xilinx ISE Design Suite10.1的安装和运用 在安装完软件后,打开EDK时,刚创建一个新工程什么都还没干,然后让它产生比特流就会出现error,具体形式如下:make:*** [_xps/system_routed]Error1,这是不是软件没安装好,但是软件安装时都挺顺利的,想请那位高手帮忙看看,还有我用的是xp的系统 ...… 查看全部问答> |
|
如何去掉该死的提示“您安装的程序可能无法正确显示,因为它是为WINDOWS MOBILE 软件的旧版本而设计。” 用VS2003开发了个小程序,一部署就提示这个,点确认了之后,还可以正确执行。 但每次都提示这个,太讨厌了,请问高手,如何去掉这个提示,是不是修改点什么东西,就不提示了啊? 例如改注册表的某一个值什么的? 不胜感激啊!!!… 查看全部问答> |




