【MSP430i2xx教程第二讲】时钟系统 & EUSCI_A_UART

2019-07-23 15:44发布

本帖最后由 xlhtracy 于 2015-4-20 15:01 编辑

本教程作者为21ic网友@gaoyang9992006 ,回帖参与讨论、提问、分享,就能赢取超多丰厚奖励哦~  @gaoyang9992006 也将随时和大家交流学习中的问题。(PS:本教程未经允许,谢绝转载
活动说明详见:【学教程,送奖励】GET新技能,和gaoyang一起学习MSP430i2xx

第一讲链接(错过的去补课 ):
【MSP430i2xx教程第一讲】怎样使用库函数 & GPIO详解

第三、四讲也已经发布啦:
【MSP430i2xx教程第三讲】24-BitΣ-Δ 模数转换器 & FlashCtl-Flash存储控制器
【MSP430i2xx教程第四讲】电源管理模块 & TLV感谢大家的热情参与,前两讲的获奖结果已公布,获奖的亲们向最终持之以恒奖冲刺吧!没获奖的亲们不要气馁,再接再励哈~

说的有点啰嗦了,下面正式开讲:




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
xlhtracy
1楼-- · 2019-07-23 21:20
本帖最后由 xlhtracy 于 2015-4-10 12:31 编辑

第三章  时钟系统(CS
3.1  本章引言
  时钟系统(Clock System)模块支持低成本和低功耗。通过使用4个内部时钟信号,用户可以在低功耗和性能之间做到最好的平衡。  时钟模块可以配置成无需任何外部组件,使用一个外部电阻器或完全使用DCO旁路模式。  时钟模块有四个系统时钟信号可以使用:
  • ACLK:辅助时钟。当运行在DCO时,ACLK是固定在32kHz。如果设备是设置在DCO旁路模式,ACLK运行在旁路时钟频率的1/512
  • MCLK:主时钟。MCLK可以被1,2,4,816分频。MCLK通常被CPU和系统使用
  • SMCLK:子系统主时钟。SMCLK可以被1,2,4,816分频。SMCLK可以被各个外围模块通过软件选择使用。
  • SD24CLK:SD24时钟提供一个1.024MHz固定频率的时钟给Sigma-Delta ADC(SD24)。
  该时钟只为SD24的请求所使用。如果SD24功能必须在DCO旁路模式下工作,那么外部时钟频率必须是16.384Mhz  这个驱动程序包含在cs.c文件里,cs.h头文件包含该应用程序使用的API定义
3.2  函数总览宏  #define CS_DCO_FREQ  16384000

1void GS_setupDCO ( uint8_t mode )使用选中的模式配置DCO2void CS_initClockSignal (uint8_t clockSource, uint8_t clockSourceDivider)使用分频器初始化时钟信号3uint32_t CS_getACLK (void)获取当前ACLK的频率(单位Hz4uint32_t CS_getSMCLK (void)获取当前SMCLK的频率(单位Hz5uint32_t CS_getMCLK (void)获取当前MCLK的频率(单位Hz6uint8_t CS_getFaultFlagStatus (uint8_t mask)获取DCO故障(或错误)标志状态
xlhtracy
2楼-- · 2019-07-24 01:58
本帖最后由 xlhtracy 于 2015-4-1 11:45 编辑

第四章  EUSCI通用异步接收器/发送器(EUSCI_A_UART4.1  本章引言  MSP430i2xx系列的EUSC_A_UART驱动库特性包括
  • 奇偶校验或非奇偶校验
  • 独立的发送和接收移位寄存器
  • 分立的发送和接收缓冲寄存器
  • 低位优先或高位优先数据发送和接收
  • 内置空闲线和地址位通信协议的多处理器系统
  • 具有从LPMx模式自动唤醒接收器启动的边缘检测
  • 用于错误检测和抑制的状态标志
  • 地址检测的状态标志
  • 用于接收和发送独立的中断能力
  在UART模式中,eUSCI在一定的位速率下,异步与另外一个设备进行字符的发送和接收。每个字符的时间长度是基于所选择的eUSCI波特率所固定的。因此,发送和接收函数要使用相同的波特率进行通信。  这个驱动程序包含在eusci_a_uart.c文件里eusci_a_uart.h头文件包含该应用程序使用的API定义
4.2  函数总览1bool EUSCI_A_UART_init ( uint16_t baseAddress,EUSCI_A_UART_initParam *param )先进的UART模块初始化程序,把初始化参数通过初始化函数写进时钟预分频器。2void EUSCI_A_UART_transmitData (uint16_t baseAddress, uint8_t transmitData)从UART模块发送出去一个字节3void EUSCI_A_UART_receiveData (uint16_t baseAddress)接收一个字节数据。4void EUSCI_A_UART_enableInterrupt (uint16_t baseAddress,uint8_t mask)
使能UART(独立的)中断源5void EUSCI_A_UART_disableInterrupt (uint16_t baseAddress,uint8_t mask)关闭UART(独立的)中断源6void EUSCI_A_UART_getInterruptStatus (uint16_t baseAddress,uint8_t mask)获取当前UART中断状态7void EUSCI_A_UART_clearInterruptStatus (uint16_t baseAddress,uint8_t mask)清除UART中断源。(备注:清除中断状态,重置中断状态标识)8void EUSCI_A_UART_enable (uint16_t baseAddress)启用UART模块9void EUSCI_A_UART_disable (uint16_t baseAddress)关闭UART模块10uint8_t EUSCI_A_UART_queryStatusFlags (uint16_t baseAddress, uint8_t mask)获取当前UART状态标志.(查询UART当前状态标识)11void EUSCI_A_UART_setDormant(uint16_t baseAddress)把UART模块设置在休眠模式12void EUSCI_A_UART_resetDormant(uint16_t baseAddress)把UART模块从休眠模式唤醒13void EUSCI_A_UART_transmitAddress(uint16_t baseAddress,uint8_t transmitAddress)根据所选的多处理器模式,传送下一个字节标记为地址14void EUSCI_A_UART_transmitBreak(uint16_t baseAddress)发送终止15uint32_t EUSCI_A_UART_getReceiveBufferAddress(uint16_t baseAddress)返回RX缓冲区的UARTDMA模块的地址。16uint32_t EUSCI_A_UART_getTransmitBufferAddress(uint16_t baseAddress)返回TX缓冲区的UARTDMA模块的地址。17void EUSCI_A_UART_selectDeglitchTime(uint16_t baseAddress,uint16_t deglitchTime)设置抗尖峰脉冲时间
xlhtracy
3楼-- · 2019-07-24 06:32
本帖最后由 xlhtracy 于 2015-4-1 11:44 编辑

  void EUSCI_A_UART_enable (uint16_t baseAddress)    启用UART模块,这将能够操作UART模块。    该函数只有1个参数:baseAddress。  参数baseAddressEUSCI_A_UART模块的基地址
xlhtracy
4楼-- · 2019-07-24 10:27
本帖最后由 xlhtracy 于 2015-4-1 11:50 编辑

4.3  例程例程将展示怎样使用EUSCI_A_UART API 来初始化EUSCI_A_UART并开始发送字符。// 使用SMCLK频率为16384000Hz配置UART模块波特率为115200// 可以在以下网址计算器计算出配置参数:
// http://software-dl.ti.com/msp430/msp430 public sw/mcu/msp430/MSP430BaudRateConverter/index.html

EUSCI_A_UART_ initParam uartConfig = {
EUSCI_A_UART_ CLOCKSOURCE SMCLK, // SMCLK Clock Source
8, // BRDIV = 8
14, // UCxBRF = 14
34, // UCxBRS = 34
EUSCI_A_UART_ NO PARITY, // No Parity
EUSCI_A_UART_ MSB FIRST, // MSB First
EUSCI_A_UART_ ONE STOP BIT, // One stop bit
EUSCI_A_UART_ MODE, // UART mode
EUSCI_A_UART_ OVERSAMPLING_BAUDRATE_GENERATION // Oversampling Baudrate
};
WDT_hold(WDT_BASE);
// 设置DCO使用内部电阻,DCO将被配置在16.384MHz. CS_setupDCO(CS_INTERNAL RESISTOR);
// SMCLK设置与DCO相同的速度。SMCLK = 16.384MHz
CS_initClockSignal(CS_SMCLK, CS_CLOCK DIVIDER_1);
// 设置P1.2P1.3管脚作为UART管脚。P1.4 管脚作为LED输出
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1, GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN4);
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);
// 配置和使能UART外设 EUSCI_A_UART_ init(EUSCI_A0_BASE, &uartConfig);
EUSCI_A_UART_ enable(EUSCI_A0_BASE);
EUSCI_A_UART_ enableInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_ RECEIVE_INTERRUPT);
while(1) {
EUSCI_A_UART_ transmitData(EUSCI_A0_BASE, TXData);
//进入休眠并等待退出LPM
__bis_SR_register(LPM0_bits | GIE);
}
xlhtracy
5楼-- · 2019-07-24 13:03
 精彩回答 2  元偷偷看……
xlhtracy
6楼-- · 2019-07-24 17:17
本帖最后由 xlhtracy 于 2015-4-1 11:54 编辑

本章节的作业:  根据例程,编写串口发送和接收程序,发送LED_ON字符串点亮接收MCULED,发送LED_OFF,关闭接收MCULED,发送LED_TEST字符串,返回当前的LED状态

一周热门 更多>