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.

[参考译文] MSP-EXP430FR4133:使用 UART 配置发送红外信号

Guru**** 2590660 points
Other Parts Discussed in Thread: MSP430FR4133, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/713866/msp-exp430fr4133-sending-ir-signals-with-uart-configuration

器件型号:MSP-EXP430FR4133
主题中讨论的其他器件:MSP430FR4133SysConfig

您好@所有!

我的红外收发器出现了一些问题。

我正在使用 MSP430FR4133 Launchpad 和 TFBS4650红外收发器。 我在网上搜索了一些解决方案、但没有找到任何解决方案。

我的代码包含通过 UART 以数据字节的形式简单发送12个字符、并采用 IR 配置。 但我不知道我的错误在哪里、因为我的 RxD 上没有用示波器可视化的信号。

volatile unsigned long int TxData = 12;


#include 



int main(){

WDTCTL = WDTPW | WDTHOLD;

PM5CTL0 &=~LOCKLPM5;

SYSCFG1 |= IRDSSEL | IREN;


//引脚配置
P1SEL0 |= BIT0 | BIT1; //端口1位0&1 auf GPIO setzen
P1DIR |= BIT1; //位1 auf 输入 RxD
P1DIR &=~BIT0; //位0 auf 输出 TXD
P4DIR |= BIT0; //端口4位0 auf 输出
P4OUT &=~BIT0;


//定时器配置

TA0CTL |= TACLR;

TA0CCTL0 |= SCS | CAP | CCIE;
TA0CCTL0 |= CM_0 | CCIS_0;

// TA0EX0 &=~TAIDEX_3; //输入分频器

TA0CTL |= TACLR;
TA0CTL |= TASSEL_SMCLK;
TA0CTL |= ID_3;
TA0CTL |= TAIE;
TA0CTL |= MC_2;


//UART 配置

UCA0CTLW0 |= UCSWRST; //eUSCI 处于复位状态

UCA0CTLW0 |= UCSSEL_SMCLK; //SMCLK
UCA0CTLW0 &=~UCPEN; //奇偶校验使能
UCA0CTLW0 &=~UCMSB; //LSB 优先
UCA0CTLW0 &=~UC7BIT; //字符 Länge 8位
UCA0CTLW0 &=~UCSPB; //一个停止位
UCA0CTLW0 &=~UCMODE0;


//波特率计算
UCA0BR0=6; // 16MHz/9600 => INT (166、67/16)= 104 //52 bei 8MHz
UCA0MCTLW |= 0x2000 | UCOS16 | UCBRF_8;//INT ((16MHz/9600 - INT (16MHz/9600)) x16)= 2
UCA0BR1 = 0x00;

//IR 配置
UCA0IRCTL |= UCIRRXFL3; //接收过滤器长度
UCA0IRCTL |= UCIRRXPL; //Receive Input polarity (接收输入极性)-->出现光脉冲时的低脉冲
UCA0IRCTL &=~UCIRRXFE; //接收过滤器使能
UCA0IRCTL |= UCIRTXPL5; //发送脉冲长度
UCA0IRCTL |= UCIRTXCLK; //发送脉冲时钟选择
UCA0IRCTL |= UCIREN; //IR 启用


UCA0CTLW0 &=~UCSWRST; //eUSCI 初始化程序

UCA0IE |= UCTXCPTIE; //发送就绪中断使能

while (1){

_enable_interrupt ();
_bis_SR_register (LPM0_bits | GIE);

}


//返回0;
}

#pragma vector = TIMER0_A1_vector
__interrupt void TIMER0_ISR1 (void){

switch (_even_in_range (TA0IV、14))(

案例0:
中断;
案例2:
中断;
案例4:
中断;
案例6:
中断;
案例8:
中断;
案例10:
中断;
案例12:
中断;
案例 TA0IV_TAIFG:
UCA0TXBUF = TxData;
中断;
默认:
break;

}



#pragma vector = USCI_A0_vector
__interrupt void USCI_A0_ISR (void){

switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG)){

USCI_NONE 案例:
中断;
USCI_UART_UCRXIFG 案例:
中断;
USCI_UART_UCTXIFG 案例:
P4OUT ^= BIT0;
中断;
USCI_UART_UCSTTIFG 案例:
中断;
USCI_UART_UCTXCPTIFG 案例:
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);
中断;
默认值:
中断;

}
}

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

    这里有三条建议供您找到问题
    1.使用红外收发器(例如其他 MSP430器件)测试您的代码以检查代码
    2.使用一些 IR 设备在 TFMB4650的接收侧提供红外光、以查看 RxD 随光的变化情况
    3.使用某些设备(可能是移动电话的相机)查看 RXD 是否有红外灯。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好!
    抱歉、我忙于 PCB 的另一部分、因此我没有检查 e2e。 我向我的主管询问了 UART 配置中 IR 部件的使用情况。 他告诉我、我应该只将 UART 与 IR 寄存器进行编码。 SysConfig 中的配置是不必要的、因为这会使用两个计时器激活 IR-mode。
    那么、当我收到 IR 发送时、我将编写代码!