历史上的今天
返回首页

历史上的今天

今天是:2025年04月20日(星期日)

正在发生

2021年04月20日 | MSP430F2616开发笔记之UART Mode from SMCLK

2021-04-20 来源:eefocus

几乎所有的单片机都会集成UART外设,但是调试MSP430的UART功能比想象的要有挑战性也更有乐趣。MSP430的UART外设提供了更丰富的硬件可定制性,允许用户使用更简洁的代码和更少的外围器件,实现非常实用的功能,比如address选择、break信号、baudrate自动检测等等。当然,UART外设有丰富的时钟选项,32.768KHZ的ACLK时钟源也可以被使用,CPU可以最大限度的处于未唤醒状态,这是为低功耗而考虑的设计。


(USI外设:Universal Serial Interface,提供这一功能的MSP430型号并不多,在调试它之前得先确认是否具备它,MSP430F2616不提供USI外设,所以直接从USCI开始。)


USCI外设:Universal Serial Communication Interface,大部分单片机会将UART、SPI、I2C外设功能分开,它们通常会使用不一样的IO引脚,不共用寄存器和中断向量;MSP430将这些外设功能集成到USCI中,它支持不同的(UART、SPI、I2C)模式,不同模式之间虽然不共用IO引脚,但是却共用寄存器和中断向量。USCI之间以不同的字母后缀来命名,比如USCI_A和USCI_B;如果有两个USCI_A,则命名为USCI_A0和USCI_A1。


其中,USCI_Ax支持UART、SPI、IrDA模式。如果需要使用UART功能,就需要设置USCI_Ax对应的IO引脚、寄存器和中断服务程序。相应的,USCI包含的SPI功能也就无法再使用。


这里UART使用的时钟是SMCLK(MCLK不能作为UART的时钟,而只能从UCLK(?)、ACLK、SMCLK中选择),默认的SMCLK来自DCOCLK,也就是MSP430自带的Digitally Controlled Oscillator时钟,IO引脚使用的是P3.4/P3.5,从数据手册可以看到它们是UART外设的专用引脚。将波特率设置为9600,分频值在数据手册中有表可查。


由于UART的接受通常使用中断,所以这里还要使能全局中断和UART接收中断。


/**********************************************************************/

uint32_t uart_rx_count = 0;


#pragma vector=USCIAB0RX_VECTOR

__interrupt void USCI0RX_ISR(void)

{

dma_temp_A[0] = UCA0RXBUF;

uart_rx_count++;

HC595_disdata_4bytes(uart_rx_count);

}


int main (void)

{

uint16_t i = 0;


WDTCTL = WDTPW + WDTHOLD;


// 等待DCOCLK稳定,并且将它调整为1MHz,而系统启动时的默认值是1.1MHz

if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF)

while(1);

BCSCTL1 = CALBC1_1MHZ;

DCOCTL = CALDCO_1MHZ;


// 开启全局中断

__bis_SR_register(GIE);


led_init();

HC595_init();


// 首先关断UART

// 选择时钟为SMCLK

// UCA0BR0、UCA0BR、UCA0MCTL的值在9600波特率,可查询技术手册提供的表格

UCA0CTL1 |= UCSWRST;

UCA0CTL1 |= UCSSEL_2;

UCA0BR0 = 104;

UCA0BR1 = 0;

UCA0MCTL = (0 << 4) + (1 << 1);


// 设置IO口的外设功能

// 启动UART

// 使能UART的接收中断

P3SEL = 0x30;

UCA0CTL1 &= ~UCSWRST;

IE2 |= UCA0RXIE;

while (1) {

for (i = 'A'; i <= 'Z'; i++) {

while (!(IFG2 & UCA0TXIFG));

UCA0TXBUF = i;

}

while (!(IFG2 & UCA0TXIFG));

UCA0TXBUF = 'r';

while (!(IFG2 & UCA0TXIFG));

UCA0TXBUF = 'n';

}

return 0;

}

/********************************************************************/

MSP430的技术手册提供了不同波特率对应的寄存器表格,观察这个表格就会发现,以1MHz的SMCLK作为时钟源时,115200波特率实际上会有一个不可忽视的误差值,在实际应用中可能要注意它带来的影响。


当使用串口调试软件发送数据时,中断服务程序就会将当前接收到的个数显示在74HC595驱动的4位数码管上面。串口和液晶由于显示事件比较长,并不适合放进中断服务程序,实际上,显示4位8段数码管也需要不短的时间,因此在中断函数中写标志位、在主函数中显示,还是更加合理的选择。


推荐阅读

史海拾趣

Fairchild Imaging公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,Fairchild Imaging制定了面向未来的战略布局。公司将继续加大在成像技术领域的研发投入,推动技术创新和产品升级。同时,Fairchild Imaging还将积极拓展国际市场,加强与全球客户的合作与交流。此外,公司还将注重人才培养和团队建设,为公司的长期发展提供有力保障。

FCI [First Components International]公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Fairchild Imaging开始拓展其产品线。除了继续推出具有竞争力的图像传感器外,公司还涉足了高端的科研级相机市场。这些科研级相机不仅具有出色的成像性能,还具备高度的可靠性和稳定性,满足了科研领域的特殊需求。此外,Fairchild Imaging还推出了一系列CCD及CMOS芯片,这些芯片在图像传输、处理和控制等方面表现出色,被广泛应用于各种电子设备和系统中。

东晨(DC)公司的发展小趣事

在电子行业中,合作与竞争并存。东晨(DC)公司善于在合作中寻求共赢,与产业链上下游企业建立了紧密的合作关系。同时,公司也积极参与市场竞争,通过不断创新和优化产品,提高市场竞争力。在与国内外同行的竞争中,东晨(DC)公司始终保持着领先地位,赢得了市场的广泛认可。

Akahane Electronics Ind Corp公司的发展小趣事

Akahane深知人才是企业发展的核心动力。因此,公司一直注重人才培养和引进。通过建立健全的培训机制和激励机制,Akahane吸引了一批批优秀的研发人才和管理人才。这些人才为公司的技术创新和市场拓展提供了有力支撑。同时,公司还积极与高校和研究机构合作,共同培养电子行业的后备力量。

思瑞浦微电子科技(3PEAK INCORPORATED)公司的发展小趣事

Akahane深知人才是企业发展的核心动力。因此,公司一直注重人才培养和引进。通过建立健全的培训机制和激励机制,Akahane吸引了一批批优秀的研发人才和管理人才。这些人才为公司的技术创新和市场拓展提供了有力支撑。同时,公司还积极与高校和研究机构合作,共同培养电子行业的后备力量。

Green Solution Technology Co Ltd公司的发展小趣事

为了应对市场的多变性和不确定性,Akahane实施了多元化战略。除了继续深耕半导体领域外,公司还积极拓展智能家居、物联网等新兴领域。通过不断推出创新产品和完善服务体系,Akahane成功打开了新市场的大门,实现了业务的多元化发展。这一战略不仅为公司带来了新的增长点,还增强了公司的抗风险能力。


这些故事虽然基于虚构,但它们反映了电子行业中企业可能经历的一些典型发展路径和挑战。希望这些故事能够满足你的需求。

问答坊 | AI 解惑

Spartan-6 and Virtex-6 FPGA Embedded Kit FAQ

1. Where can I purchase an Embedded kit?   2. How much do the Spartan-6 and Virtex-6 FPGA Embedded Kits cost? 3. When will I get my kit? 4. What are included in the Embedded Kits? 5. What expansion ports are avail ...…

查看全部问答>

wince平台中文版本和英文版本应用程序显示的界面大小不同

开发平台是vs2005下vc++下的智能设备开发 三星s2440下的wince平台 屏幕显示分辨率为800*600 在中文版本下应用程序可以全屏显示,但是到了英文平台,只能显示出程序的一部分内容,感觉像是应用程序的分辨率变小了 如果换成vs2005下C#下的智能设备 ...…

查看全部问答>

关于PB5.0编译汇编文件的问题

系统wince5.0,2440硬件平台,修改了/kernel/hal/arm/fw.s文件后,在pb5.0上编译后整个系统都跑不起来,同样目录下的c文件修改后编译就没有问题,不知是什么原因,后来在PB4.2下编译好fw.s文件,直接把编译好的fw.obj  copy到5.0里链接, ...…

查看全部问答>

SD卡等存储设备突然掉电后不可用的原因求助

是BPB还是FAT或FDT的损坏? 除了硬件损坏,文件系统突然断电会有什么样的写入错误造成存贮设备不可用吗? 一般的文件系统如果是先写数据,再记录FAT和FDT会提高保护的可能性吗。…

查看全部问答>

请问要从支持HL7协议的病人监护仪的网口读出数据和波形,谁会做?报酬详谈

请问要从支持HL7协议的病人监护仪的网口读出数据和波形,谁会做?报酬详谈 QQ:312969842…

查看全部问答>

急!急!急!!!硬盘数据format后,重写过怎么找回?

nnd,今天冲装系统的时候,明明是看的是c盘,确把D盘个了,装好了才发现,气死了. 有什么工具可以恢复吗? …

查看全部问答>

usb驱动+钩子

谁有USB驱动+HOOK的例子和资料呀。 特别感谢!!!!…

查看全部问答>

求教C64x中EMIF中BE[7:0]的作用?

本帖最后由 dontium 于 2015-1-23 13:38 编辑 请大家帮忙,在C64x的EMIF在SDRAM接口中,如何通过BE[7:0]实现8bit、16bit、32bit、64bit的寻址方式? …

查看全部问答>

求助示波器2.0中的HSMC接口相关文献

现在正在做一个板子,需要做HSMC接口。可是网上找不到资料,ALTERA公司网站也没有。看到你们这边做示波器2.0中用到了这个接口,想跟你们求助一下,看看有没有封装等资料能共享一下,谢谢了………

查看全部问答>

大哥大姐们求助!!!!

我用的NCP14025V的升压芯片但是纹拨太大,求教怎么解决啊,或者推荐别的芯片,实在不行我想把3.3V升压到7,8V再用别的芯片降到5V不知道可行否;…

查看全部问答>