DSP28377D项目实战 (4) - 高速串口打印波形

前言

在实际调试控制程序过程中,往往需要将关键变量实时输出为波形进行分析,通过对比理论模型与实际运行数据,评估系统的动态响应和稳态性能。本节基于一路 SCI 实现高速数据通信,波特率配置为 6.25 MHz,用于支撑高频采样数据的实时传输与调试验证。

代码

复制代码
#include "SciTest.h"

char TxBuf[20]={0};
char RxBuf[20]={0};
sci_test_t Sci_Data = {0};

void SciTest_Init(void)
{
    // 进入软件复位态:在复位态下做配置
    SciaRegs.SCICTL1.bit.SWRESET = 0;

    // 帧格式:1停止位,8位数据,无校验(8N1)
    SciaRegs.SCICCR.all = 0x0007;

    // 波特率:6.25Mhz
    // 在InitPeripheralClocks中修改一下低速外设时钟分频系数
    // ClkCfgRegs.LOSPCP.all = 0x0001

    SciaRegs.SCIHBAUD.all = 0x0000;
    SciaRegs.SCILBAUD.all = 0x0001;

    // 开启FIFO
    SciaRegs.SCIFFTX.bit.SCIFFENA   = 1;                               // 使能FIFO增强
    SciaRegs.SCIFFRX.bit.RXFIFORESET= 0; SciaRegs.SCIFFRX.bit.RXFIFORESET=1; // RX FIFO复位
    SciaRegs.SCIFFTX.bit.TXFIFORESET = 0;SciaRegs.SCIFFTX.bit.TXFIFORESET = 1;// TX FIFO复位

    // FIFO中断阈值与中断使能
    SciaRegs.SCIFFRX.bit.RXFFIL     = 16;                                // RX≥16触发中断
    SciaRegs.SCIFFRX.bit.RXFFIENA   = 0;                                // 使能RX FIFO阈值中断
    SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;

    // 先清标志
    // 使能收发并退出软件复位
    SciaRegs.SCICTL1.bit.RXENA = 1;                                     // 开接收
    SciaRegs.SCICTL1.bit.TXENA = 1;                                     // 开接收
    SciaRegs.SCICTL1.bit.SWRESET = 1;

    EINT;

}

void SciTest_TxData(sci_test_t *p)
{
    if(p->Ch1Addr == 0)
        *p->TxCH1 = 0;
    else
        p->TxCH1 = (Uint16 *)p->Ch1Addr;

    if(p->Ch2Addr == 0)
        *(p->TxCH2) = 0;
    else
        p->TxCH2 = (Uint16 *)p->Ch2Addr;

    if(p->Ch3Addr == 0)
        *(p->TxCH3) = 0;
    else
        p->TxCH3 = (Uint16 *)p->Ch3Addr;

    if(p->Ch4Addr == 0)
        *(p->TxCH4) = 0;
    else
        p->TxCH4 = (Uint16 *)p->Ch4Addr;

    TxBuf[0] = 0xA5;

    TxBuf[1] = (Uint8)((*(p->TxCH1) & 0xFF00)>> 8);
    TxBuf[2] = (Uint8)(*(p->TxCH1) & 0x00FF);
    TxBuf[3] = (Uint8)((*(p->TxCH2) & 0xFF00)>> 8);
    TxBuf[4] = (Uint8)(*(p->TxCH2) & 0x00FF);
    TxBuf[5] = (Uint8)((*(p->TxCH3) & 0xFF00)>> 8);
    TxBuf[6] = (Uint8)(*(p->TxCH3) & 0x00FF);
    TxBuf[7] = (Uint8)((*(p->TxCH4) & 0xFF00)>> 8);
    TxBuf[8] = (Uint8)(*(p->TxCH4) & 0x00FF);

    TxBuf[9] = 0x5A;

    for(int i = 0; i < 10; i++)
    {
       SciaRegs.SCITXBUF.all = TxBuf[i] & 0xFF;
    }
}

void SciTest_RxData(sci_test_t *p)
{
    Uint16 temp = 0;
    if (SciaRegs.SCIFFRX.bit.RXFFOVF == 1)
    {
        SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1;
        SciaRegs.SCIFFRX.bit.RXFIFORESET = 0;
        SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;
        return;
    }

    if(SciaRegs.SCIFFRX.bit.RXFFST == 16 )
    {
        temp = SciaRegs.SCIFFRX.bit.RXFFST;
        for(int i = 0;i < temp;i++)
        {
            RxBuf[i] = SciaRegs.SCIRXBUF.all;
        }
        //控制指令
        p->RxCH1 = ((uint16_t)RxBuf[1] << 8) | RxBuf[0];
        p->RxCH2 = ((uint16_t)RxBuf[3] << 8) | RxBuf[2];
        p->RxCH3 = ((uint16_t)RxBuf[5] << 8) | RxBuf[4];
        p->RxCH4 = ((uint16_t)RxBuf[7] << 8) | RxBuf[6];
        //变量地址
        p->Ch1Addr = ((uint16_t)RxBuf[9] << 8) | RxBuf[8];
        p->Ch2Addr = ((uint16_t)RxBuf[11] << 8) | RxBuf[10];
        p->Ch3Addr = ((uint16_t)RxBuf[13] << 8) | RxBuf[12];
        p->Ch4Addr = ((uint16_t)RxBuf[15] << 8) | RxBuf[14];
    }
}



#ifndef APP_SCITEST_H_
#define APP_SCITEST_H_


#include "common.h"

typedef struct{
    Uint16 Ch1Addr;
    Uint16 Ch2Addr;
    Uint16 Ch3Addr;
    Uint16 Ch4Addr;

    Uint16 RxCH1;
    Uint16 RxCH2;
    Uint16 RxCH3;
    Uint16 RxCH4;

    Uint16 *TxCH1;
    Uint16 *TxCH2;
    Uint16 *TxCH3;
    Uint16 *TxCH4;

}sci_test_t;


extern sci_test_t Sci_Data;

extern void SciTest_Init(void);
extern void SciTest_TxData(sci_test_t *p);
extern void SciTest_RxData(sci_test_t *p);

#endif /* APP_SCITEST_H_ */

上位机

变量地址就填写CCS中创建的变量的内存地址就行(16进制地址)

调用

直接把上述的C文件和头文件放入工程中就行,在while中一直调用接收函数和发送函数即可。

验证

锁相环α和β分量的波形

锁相环Ud和Uq及补偿角的波形

资源

这个上位机使用labview开发的,需要下载labview相关资源

下载NI-VISA - NI

【免费】高速串口-6M.rar资源-CSDN下载

【免费】ni-labview-2024-runtime-engine-x86-24.1-online.exe资源-CSDN下载

相关推荐
fie888920 小时前
基于51单片机的航模遥控器6通道接收机程序
单片机·嵌入式硬件·51单片机
bu_shuo20 小时前
嵌入式硬件工程师VS单板硬件工程师
嵌入式硬件·电子工程师·单板硬件
llilian_1620 小时前
选择北斗导航卫星信号模拟器注意事项总结 北斗导航卫星模拟器 北斗导航信号模拟器
功能测试·单片机·嵌入式硬件·测试工具·51单片机·硬件工程
Yyq1302086968220 小时前
MH2457,‌国产 32 位屏驱 MCU‌芯片,支持‌1080P 高清显示‌与‌以太网通信‌,广泛应用于两轮车仪表盘及工控屏等领域
单片机·嵌入式硬件
爱吃程序猿的喵21 小时前
南邮计科电工电子实验B《RLC串联谐振电路》实验报告
单片机·嵌入式硬件
独小乐21 小时前
009.中断实践之实现按键测试|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·arm
XINVRY-FPGA21 小时前
XC7VX690T-2FFG1157I Xilinx AMD Virtex-7 FPGA
arm开发·人工智能·嵌入式硬件·深度学习·fpga开发·硬件工程·fpga
bubiyoushang8881 天前
利用STM32实现Modbus通信(RTU从机方案)
stm32·单片机·嵌入式硬件
cmpxr_1 天前
【单片机】常用设计模式
单片机·嵌入式硬件·设计模式
杰杰桀桀桀1 天前
4*4无时延矩阵键盘(非阻塞)--附代码链接
stm32·单片机·嵌入式硬件·矩阵·计算机外设·无时延矩阵键盘