主题中讨论的其他器件:C2000WARE
//##########################################################################出################################出
//
//文件:sci_ex3_echoback.c
//
//标题:SCI 回送示例。
//
//! \addtogroup driver_example_list
//!
SCI 回送
//!
//! 该测试通过 SCI-A 端口接收和回传数据。
//!
//! 可以使用'putty'等终端查看来自
//! 和向 SCI 发送信息。 已接收的字符
//! 数据包被发送回主机。
//!
//! \b 正在运行\b 应用程序
//! 使用终端按照以下设置打开 COM 端口:
//! -找到正确的 COM 端口
//! -每秒位数= 9600
//! -数据位= 8
//! -奇偶校验=无
//! -停止位= 1
//! -硬件控制=无
//!
//! 该程序将打印出问候语、然后要求您
//! 输入一个字符、它将回显到终端。
//!
//! \b 监视\b 变量\n
//! - loopCounter -发送的字符数
//!
//! /b 外部连接\n
//! 使用 USB 电缆将控制卡 J1:A 连接到 PC
//!
//
//##########################################################################出################################出
//
//
//$Copyright:
//版权所有(C) 2023德州仪器(TI)公司- http://www.ti.com/
//
//以源代码和二进制形式重新分发和使用,无论有无
//修改,前提是满足以下条件
//已满足:
//
//重新分发源代码必须保留以上版权
//通知,此条件列表和下述免责声明。
//
//以二进制形式重新分发必须复制上述版权
//通知,此条件列表和以下免责声明(位于
///文件和/或其他材料
//分布。
//
// TI 公司名称或公司名称
//其贡献者可用于认可或推广派生的产品。
//未经事先书面许可从本软件获得。
//
//此软件由版权持有者和贡献者提供
//"按原样"和任何明示或暗示的保证、包括但不限于
//仅限于对适销性和适用性的暗示保证
//不考虑特定目的。 在任何情况下、版权均不得
//所有者或贡献者对任何直接、间接、偶然、
//特殊、示例或后果性损害(包括但不包括
//仅限于采购替代货物或服务;不能使用、
///数据或利润;或业务中断)
//责任理论,无论是在合同,严格的责任,或侵权
//(包括疏忽或其他)以任何方式产生的使用
//本软件,即使已被告知此类损坏的可能性。
//$
//##########################################################################出################################出
//
//包含的文件
//
#include "driverlib.h"
#include "device.h"
//
//定义
//
//定义自动波特以使用自动波特锁定功能
//#define autobaud (定义自动波特)
//
//全局变量
//
uint16_t loopCounter = 0;
uint16_t receivedChar;
uint16_t rxStatus = 0u;
//
//主菜单
//
__interrupt void sciaRXFIFOISR (void);
空 main (void)
{
unsigned char * msg;
//
//配置 PLL,禁用 WD,启用外设时钟。
//
device_init();
//
//禁用引脚锁定并启用内部上拉。
//
device_initGPIO();
//
// GPIO28是 SCI Rx 引脚。
//
GPIO_setPinConfig (DEVICE_GPIO_CFG_SCIRXDA);
GPIO_setDirection 模式(DEVICE_GPIO_PIN_SCIRXDA、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (DEVICE_GPIO_PIN_SCIRXDA、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (DEVICE_GPIO_PIN_SCIRXDA、GPIO_QUAL_ASYNC);
//
// GPIO29是 SCI Tx 引脚。
//
GPIO_setPinConfig (DEVICE_GPIO_CFG_SCITXDA);
GPIO_setDirection 模式(DEVICE_GPIO_PIN_SCITXDA、GPIO_DIR_MODE_OUT);
GPIO_setPadConfig (DEVICE_GPIO_PIN_SCITXDA、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (DEVICE_GPIO_PIN_SCITXDA、GPIO_QUAL_ASYNC);
//
//初始化中断控制器和矢量表。
//
interrupt_initModule();
interrupt_initVectorTable();
//
//初始化 SCIA 及其 FIFO。
//
SCI_performSoftwareReset (SCIA_BASE);
//
//为回显配置 SCIA。
//
SCI_setConfig (SCIA_BASE、DEVICE_LSPCLK_FREQ、9600、(SCI_CONFIG_WLEN_8 |
SCI_CONFIG_STOP_ONE |
SCI_CONFIG_PAR_NONE);
SCI_resetChannels (SCIA_BASE);
SCI_resetRxFIFO (SCIA_BASE);
SCI_resetTxFIFO (SCIA_BASE);
SCI_clearInterruptStatus (SCIA_BASE、SCI_INT_TXFF | SCI_INT_RXFF);
SCI_enableFIFO (SCIA_BASE);
SCI_enableModule (SCIA_BASE);
SCI_performSoftwareReset (SCIA_BASE);
#ifdef 自动波特
//
//执行自动波特锁定。
// SCI 希望使用'A'或'A'来锁定波特率。
//
SCI_lockAutobaud (SCIA_BASE);
#endif
//CPUTimer_startTimer (myCPUTIMER0_BASE);
//
//发送启动消息。
//
MSG ="\r\n\n\nHello World!\0";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、17);
MSG ="\r\n 您将输入一个字符、DSP 将回显它!\n\n";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、62);
for (;;)
{
MSG ="\r\n 输入字符:\0";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、22);
//
//从 FIFO 中读取一个字符。
//
receivedChar = SCI_readCharBlockingFIFO (SCIA_BASE);
SCI_writeCharBlockingFIFO (SCIA_BASE、receivedChar);
rxStatus = SCI_getRxStatus (SCIA_BASE);
if (((rxStatus 和 SCI_RXSTATUS_ERROR)!= 0)
{
//
//如果执行在这里停止,有一些错误
//分析 SCI_getRxStatus () API 返回值
//
ESTOP0;
}
//回显字符。
//
MSG ="您已发送:\0";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、13);
SCI_writeCharBlockingFIFO (SCIA_BASE、receivedChar);
//
//递增循环计数变量。
//
DEVICE_DELAY_US (20000);
循环计数器++;
}
}
__interrupt void sciaRXFIFOISR (void)
{
//
//从 FIFO 中读取一个字符。
//
receivedChar = SCI_readCharBlockingFIFO (SCIA_BASE);
rxStatus = SCI_getRxStatus (SCIA_BASE);
if (((rxStatus 和 SCI_RXSTATUS_ERROR)!= 0)
{
//
//如果执行在这里停止,有一些错误
//分析 SCI_getRxStatus () API 返回值
//
ESTOP0;
}
//
//回显字符。
//
SCI_writeCharBlockingFIFO (SCIA_BASE、receivedChar);
SCI_clearOverflowStatus (SCIA_BASE);
//
SCI_clearInterruptStatus (SCIA_BASE、SCI_INT_RXFF);
//
//发出 PIE 回路
//
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group9);
}
//
//文件结束
//
上面的代码在这里停止
//如果执行在这里停止,有一些错误
//分析 SCI_getRxStatus () API 返回值
有人能帮助我解决这个问题吗?