This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F4270:TA UART 的 MSP430F4270代码示例可以更改为 N81或 N82?

Guru**** 2555630 points
Other Parts Discussed in Thread: MSP430F4270

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/597564/msp430f4270-msp430f4270-code-example-of-ta-uart-can-be-change-to-n81-or-n82

器件型号:MSP430F4270

大家好、我最近使用的是 MSP430F4270的 UART 示例代码

它使用计时器来使 UART 工作、但我需要添加 UART 设置

例如:N81 =>数据位:8位、奇偶校验:无、停止位:1位

    N82 =>数据位:8位、奇偶校验:无、停止位:2位

#include

在 P1.1上#define RXD 0x02 // RXD
#define TXD 0x01 // P1.0上的 TXD

// 9600波特率 SW UART 的条件、SMCLK = 1048576

#define BiTime_5 0x47 //~ 0.5位长度+小调整
#define BiTime 0x6C //~ 9620波特

unsigned int RXTXData;
unsigned char Bitcnt;

void TX_Byte (void);
void RX_Ready (void);

int main (空)

WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
FLL_CTL0 |= XCAP14PF;//配置负载电容
CCTL0 = OUT;// TXD 空闲作为标记
TACTL = tassel_2 + MC_2;// SMCLK、连续模式
P1SEL = TXD + RXD;// P1.0/1 TA0用于 TXD/RXD 功能
P1DIR = TXD;// P1上的 TXD 输出

// Mainloop
对于(;)

RX_Ready ();// UART 准备好接收一个字节
_bis_SR_register (CPUOFF + GIE);//输入 LPM0直到字符 RXed
TX_Byte ();// TX Back RXed Byte received


//函数从 RXTXData 缓冲器发送字符
void TX_Byte (void)

Bitcnt = 0xA;//加载位计数器、8个数据+ ST/SP
CCR0 = TAR;// TA 计数器的当前状态
CCR0 +=双时;//直到第一位的某个时间
RXTXData |= 0x100;//向 RXTXData 添加标记停止位
RXTXData = RXTXData << 1;//添加空间起始位
CCTL0 = OUTMOD0 + CCIE;// TXD = MARK = IDLE
while (CCTL0 & CCIE);//等待 TX 完成


//函数读取 UART 以将字符接收到 RXTXData 缓冲器中
void RX_Ready (void)

Bitcnt = 0x8;//加载位计数器
CCTL0 = SCS + CCIS0 + OUTMOD0 + CM1 + CAP + CCIE;//同步、负边沿、捕捉


//计时器 A0中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=TIMERA0_vector
_interrupt void Timer_A (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (TIMERA0_vector)) Timer_A (void)
其他
错误编译器不受支持!
#endif

CCR0 += BiTime;//将偏移添加到 CCR0

// RX
IF (CCTL0和 CCIS0)// CCI0B 上的 RX?

if (CCTL0 & CAP)//捕获模式=起始位边沿

CCTL0 &=~ CAP;//捕获到比较模式
CCR0 += BiTime_5;

其他

RXTXData = RXTXData >> 1;
IF (CCTL0和 SCCI)//获取接收锁存中的等待位
RXTXData |= 0x80;
Bitcnt --;//所有位都是 RXed?
如果(Bitcnt = 0)
//>>>>> 在此处解码接收到的字节<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

CCTL0 &=~ CCIE;//所有位 RXED、禁用中断
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//从0 (SR)清除 LPM0位

//>>>>> 在此处解码接收到的字节<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


// TX
其他

如果(Bitcnt = 0)
CCTL0 &=~ CCIE;//所有位 TXed、禁用中断
其他

CCTL0 |= OUTMOD2;// TX 空间
IF (RXTXData & 0x01)
CCTL0 &=~ OUTMOD2;// TX 标记
RXTXData = RXTXData >> 1;
Bitcnt --;


有人能帮我解决这个问题吗?  谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此代码已使用8N1。

    对于两个停止位、只需再使用一个位(11而不是10)、并将附加位设置为1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    或仅在发送后延迟1位时间。