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.

[参考译文] LAUNCHXL-F28069M:LAUNCHXL-F28069M

Guru**** 2602325 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/677847/launchxl-f28069m-launchxl-f28069m

器件型号:LAUNCHXL-F28069M
主题中讨论的其他器件:C2000WARE

您好! 我想知道我是否正确设置了这个简单的 UART 程序。

我要做的就是在我接收某个内容时接收一个中断、并将我接收的内容存储在数组中。 我将会收到一些简单的字符串、例如"Go"、"Sttop"、 "Route 1"、"Route 2"、我将解析这些字符串。

我将以9600波特运行、半双工(只需接收)、我认为我不需要 FIFO (仍然不确定它的用途!)。   

下面是我从一个示例项目开始提出的内容:

#include "DSP28x_Project.h"//器件头文件和示例 include 文件

#define CPU_FREQ 90E6
#define LSPCLK_FREQ CPU_FREQ/4
#define SCI_FREQ 100E3
#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1

UINT16 RXParseData[256];//针对 SCI-A 接收到的数据

void main (void)

//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2806x_SYSCTRL.c 文件中。
InitSysCtrl();

//设置 UART RX 引脚->函数:void InitScibGpio()
EALLOW;

GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;//为 GPIO19启用上拉(SCIRXDB)

/*将所选引脚的限定条件设置为仅异步*/
默认情况下、//输入与 SYSCLKOUT 同步。
//这将为所选引脚选择异步(无限定条件)。

GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3;//异步输入 GPIO19 (SCIRXDB)

/*使用 GPIO 寄存器配置 SCI-B 引脚*/
//这指定哪些可能的 GPIO 引脚将是 SCI 功能引脚。

GpioCtrlRegs.GPAMUX2.bit.GPIO19=2;//为 SCIRXDB 运行配置 GPIO19

EDIS;
//结束设置 UART RX 引脚


SciaRegs.SCICCR.all =0x0007;// 1停止位,无回路
//无奇偶校验,8个字符位,
//异步模式,空闲线协议

SciaRegs.SCICTL1.all =0x0001;//启用 RX、SW 复位、
//禁用 TX、RX ERR、睡眠、TXWAKE


SciaRegs.SCICTL2.bit.RXBKINTENA=1;//启用接收器中断

SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = SCI_PRD;//9600波特


SciaRegs.SCICTL1.all =0x0021;//从复位中撤回 SCI

//结束函数


/////////////////////////////////////////////////////////////// 中断服务例程////////////////////////////////////////////////////////////////////////////////////////////////////////////////  这是正确的吗?

// INT9.3
_interrupt void SCIRXINTB_ISR (void)   // SCI-B

uint16 i = 0;

while (i!= NULL)

RXParseData[i]=SciaRegs.SCIRXBUF.all;//读取数据
i++;

//要接收来自此 PIE 组的更多中断,请确认此中断
PieCtrlRegs.PIEACX.ALL = PIEACK_group9;

谢谢!

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

    尊敬的 Andrew:

    • 在使用 SCIB 时、请使用 scibregs 而不是 sciaregs。
    • 您需要添加与中断和 PIE 相关的 API、以触发和攻击 ISR。
    • 下面的这3条语句必须位于 Rx ISR 内部。

    SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;//清除溢出标志
    SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志

    PieCtrlRegs.PIEACX.All|=0x100;//发出 PIE ACK

    • 有关 sci_init 配置、请参阅 c2000ware 中 sci_echoback 部分的示例
    • 请参阅 sci_loopback_interrupt 示例以了解 Rx 配置的其余框架。
    • 为 SCI_PRD 等添加宏定义。

    此致。

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

    嘿,Meghana!

    我已经修改了代码来处理 B-regs。 我了解 UART 框架、但我不太确定您为 中断添加 API 意味着什么。 在 PIECTRL 模块中没有这样做吗? 不过、我肯定会错的。

    此外、是否还需要在顶部定义 SCI_PRD 的宏定义?

    我确实看了这两个示例、但我不确定我缺少什么!  我是为学校项目做这件事的、时间是最重要的! 如果你愿意给我一些指导、我会非常感激!

    以下是修订后的代码:

    #include "DSP28x_Project.h"//器件头文件和示例 include 文件

    #define CPU_FREQ 90E6
    #define LSPCLK_FREQ CPU_FREQ/4
    #define SCI_FREQ 100E3
    #define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1

    UINT16 RXParseData[256];//针对 SCI-B 接收到的数据

    void main (void)

    //步骤1. 初始化系统控制:
    // PLL、安全装置、启用外设时钟
    //此示例函数位于 F2806x_SYSCTRL.c 文件中。
    InitSysCtrl();

    //设置 UART RX 引脚->函数:void InitScibGpio()
    EALLOW;

    GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;//为 GPIO19启用上拉(SCIRXDB)

    /*将所选引脚的限定条件设置为仅异步*/
    默认情况下、//输入与 SYSCLKOUT 同步。
    //这将为所选引脚选择异步(无限定条件)。

    GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3;//异步输入 GPIO19 (SCIRXDB)

    /*使用 GPIO 寄存器配置 SCI-B 引脚*/
    //这指定哪些可能的 GPIO 引脚将是 SCI 功能引脚。

    GpioCtrlRegs.GPAMUX2.bit.GPIO19=2;//为 SCIRXDB 运行配置 GPIO19

    EDIS;
    //结束设置 UART RX 引脚


    ScibRegs.SCICCR.all =0x0007;// 1停止位,无环回
    //无奇偶校验,8个字符位,
    //异步模式,空闲线协议

    ScibRegs.SCICTL1.all =0x0001;//启用 RX、SW 复位、
    //禁用 TX、RX ERR、睡眠、TXWAKE


    ScibRegs.SCICTL2.bit.RXBKINTENA=1;//启用接收器中断

    ScibRegs.SCIHBAUD = 0x0000;
    ScibRegs.SCILBAUD = SCI_PRD;//9600波特


    ScibRegs.SCICTL1.all =0x0021;//从复位中撤回 SCI

    //结束函数


    /////////////////////////////////////////////////////////////// 中断服务例程////////////////////////////////////////////////////////////////////////////////////////////////////////////////  

    // INT9.3
    _interrupt void SCIRXINTB_ISR (void)// SCI-B

    uint16 i = 0;

    while (i!= NULL)

    RXParseData[i]=ScibRegs.SCIRXBUF.all;//读取数据
    i++;


    ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;//清除溢出标志
    ScibRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志

    //要接收来自此 PIE 组的更多中断,请确认此中断

    PieCtrlRegs.PIEACX.ALL = PIEACK_group9;

     

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

    尊敬的 Andrew:

    我的意思是为中断添加 API、即添加以下 API

    Dint;

    InitPieCtrl();

    IER = 0x0000;
    IFR = 0x0000;

    InitPieVectTable();

    是的、它在 PIECTRL 模块中完成。 但配置初值必须在示例本身中完成。

    是的、SCI_PRD 的宏定义在示例的顶部定义、但在您共享的代码中没有定义。

    其余部分看起来不错。

    如果您在电路板上运行时遇到问题、请告知我。

    此致。