对比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相关的语句,修改相应的寄存器选项。
|