找回密码
 立即注册
查看: 1660|回复: 14

虚拟硬件体验:【AIapp-ISP-V6.95D 版 | 调试仿真接口 | 擎天柱-LED-DIP40】

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-11-30 14:54:12 | 显示全部楼层 |阅读模式
虚拟硬件体验:
【AIapp-ISP-V6.95D 版 | 调试仿真接口 | 擎天柱-LED-DIP40】
使用串口DMA方式, 同步I/O状态方便观察
截图202412071125527947.jpg
截图202411301627303124.jpg

截图202411301627009999.jpg

首先使用自发自收的例程体验了一下数据流显示
截图202411301448449016.jpg

然后基于命令串,做了一个DMA-UART方案的自动IO状态同步程序:
先看一下效果:



那么要怎么添加这个IO同步显示的功能呢?
程序采用分体式文件,只需要将io_sync.c和io_sync.h添加到工程中。

截图202411301449598310.jpg
然后在主程序中引用io_sync.h,并添加一行
截图202411301451049890.jpg
进行初始化即可,之后就完全不用管了,DMA会自动重复触发
函数的具体介绍在.h文件中
截图202411301451355587.jpg
以下是测试程序和独立的.c/.h文件
io_sync文件.zip (1.69 KB, 下载次数: 53)
IO端口同步到STC-ISP测试程序.zip (88.67 KB, 下载次数: 46)


以下是具体的实现方式:
首先,基于DMA的发送完成中断,可以再次启动下一次发送,从而达到自循环的目的
其次,通过控制DMA_UR1_ITV寄存器,即可实现发送每个数据间的自动延时。
以下是核心配置和实现程序:
  1. void DMA_Config(void)
  2. {
  3.     DMA_UR1T_CFG = 0x80; // bit7 1:Enable Interrupt
  4.     DMA_UR1T_STA = 0x00;
  5.     DMA_UR1T_AMT = (12 - 1); // 设置传输总字节数(低8位):n+1
  6.     DMA_UR1T_TXAH = (u8)((u16)&io_sync_buf >> 8);
  7.     DMA_UR1T_TXAL = (u8)((u16)&io_sync_buf);
  8.     DMA_UR1_ITVH = 0xff; // 防止加重系统负担
  9.     DMA_UR1T_CR = 0xc0;           // bit7 1:使能 UART1_DMA, bit6 1:开始 UART1_DMA 自动发送
  10. }
  11. // IO 同步输出初始化函数
  12. //  fosc: 主时钟频率,单位为Hz
  13. //  brt: 波特率,单位为Hz
  14. //  timer: 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
  15. void sync_io_init(long fosc, long brt, char timer)
  16. {
  17.     EAXFR = 1;
  18.     _fosc = (long)(fosc); // 定义主时钟(精确计算波特率)
  19.     _brt = (long)(brt);   // 定义波特率
  20.     UART1_config(timer);  // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
  21.     DMA_Config();
  22.     EA = 1;
  23. }
  24. void _uart_tx_dma_io_sync(void) interrupt 50
  25. {
  26.     io_sync_buf[0 + 6] = P0;
  27.     io_sync_buf[1 + 6] = P1;
  28.     io_sync_buf[2 + 6] = P2;
  29.     io_sync_buf[3 + 6] = P3;
  30.     io_sync_buf[4 + 6] = P4;
  31.     io_sync_buf[5 + 6] = P5;
  32.     DMA_UR1T_STA = 0x00;
  33.     DMA_UR1T_CR = 0xc0; // 拉起下次发送
  34. }
复制代码
这样就可以通过一次初始化,将端口状态自动转发到串口,全程无需其他代码参与。
DMA和中断就自动完成了这个过程




回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-11-30 15:09:35 | 显示全部楼层
USB-CDC版本 的 I/O监控:
USB直连,无需 下载器-转串口/USB转串口,无需设置波特率(省心快捷)
程序已经封装为一个.c文件,只需要在程序中引用#include "io_cdc.h"即可使用
使用方式是直接调用io_cdc_sync();即可使用
截图202411301632002569.jpg
需要给程序添加的文件有:
截图202411301634501384.jpg
以下是示例程序和独立的文件包:
IO端口同步到STC-ISP测试程序(CDC版本).zip (144.46 KB, 下载次数: 47)
io_cdc文件.zip (21.78 KB, 下载次数: 45)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-11-30 15:23:15 | 显示全部楼层
本帖最后由 VCC 于 2024-11-30 15:38 编辑
进行初始化即可,之后就完全不用管了,DMA会自动重复触发


这个最高速率怎么样呢?

是不是可以用这种方式制作一个逻辑分析仪

点评

目前实现了ADC-DMA到USB 速度相当快,并且全程都是DMA转发,相当快 高速CDC数据传输 ADC-DMA到USB-CDC做简易示波器 - FOC,有ICache的 32F12K54 测试版块 国芯技术交流网站 - AI32位8051交流社区 [attachimg]66841[  详情 回复 发表于 2024-11-30 18:03
串口方式速率不高吧,而且这个只能看看状态。 USB方式倒是可以通过DMA载入缓冲区数据实现变量监控 你说的这个很有意思,等我研究一下  详情 回复 发表于 2024-11-30 15:34
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-11-30 15:34:33 | 显示全部楼层
VC*** 发表于 2024-11-30 15:23
这个最高速率怎么样呢?

是不是可以用这种方式制作了一个逻辑分析仪

串口方式速率不高吧,而且这个只能看看状态。
USB方式倒是可以通过DMA载入缓冲区数据实现变量监控
你说的这个很有意思,等我研究一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2024-11-30 15:58:21 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15611
发表于 2024-11-30 16:21:28 | 显示全部楼层
估计用的实验箱上的 USB转双串口,可以10Mbps
截图202411301620347554.jpg

截图202411301621212302.jpg


截图202411301623018619.jpg



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-11-30 18:03:16 | 显示全部楼层
VC*** 发表于 2024-11-30 15:23
这个最高速率怎么样呢?

是不是可以用这种方式制作一个逻辑分析仪

目前实现了ADC-DMA到USB

速度相当快,并且全程都是DMA转发
高速CDC数据传输 ADC-DMA到USB-CDC做简易示波器 - FOC,有ICache的 32F12K54 测试版块 国芯技术交流网站 - AI32位8051交流社区
截图202411301759251624.jpg
你说的逻辑分析仪用PWM-DMA我觉得很不错,可以通过使用PLL下的PWM来记录高速的逻辑信号。
不过上位机用串口助手可能就不大合适了,数据传输效率有点低(最少8个位才能表示一个1或0),应该需要专用的上位机
或者使用按键触发记录缓存,然后再进行回放的方式也可以
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-11-30 18:07:05 | 显示全部楼层
王*** 发表于 2024-11-30 18:03
目前实现了ADC-DMA到USB

速度相当快,并且全程都是DMA转发

我对Ai8051U了解得不多

PWM-DMA-USB如何能实现IO口状态读取?我理解里PWM应该是一个输出模块,这是怎么做到的?

点评

事实上,STC的PWM也能做为信号捕获 具体流程是:选定上升沿/下降沿,PWM部分捕获到这个信号的时候会将此刻的PWM计时器值记下,并给出一个中断。 因为PWM部分可以通过PLL使用120Mhz这样的高速信号,所以PWM捕获相比IO  详情 回复 发表于 2024-11-30 18:10
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-11-30 18:10:39 | 显示全部楼层
VC*** 发表于 2024-11-30 18:07
我对Ai8051U了解得不多

PWM-DMA-USB如何能实现IO口状态读取?我理解里PWM应该是一个输出模块,这是怎么 ...

事实上,STC的PWM也能做为信号捕获
具体流程是:选定上升沿/下降沿,PWM部分捕获到这个信号的时候会将此刻的PWM计时器值记下,并给出一个中断。
因为PWM部分可以通过PLL使用120Mhz这样的高速信号,所以PWM捕获相比IO直接捕获要更快,并且通过设定PWM-DMA,还可以将每次捕获的值进行存储,这样就得到了一串跳变之间的时间,通过对这段时间的重绘就能得到一个完整的波形了
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15611
发表于 2024-12-7 13:13:25 | 显示全部楼层
客服学习


while(1)
{
        LED40_ClrBit(2, 0);   // P20 = 0;
        void Delay1000ms(void)        //@40MHz
        {
                unsigned long edata i;

                _nop_();
                _nop_();
                i = 9999998UL;
                while (i)  i--;
        }
        
        LED40_SetBit(2, 0);   // P20 = 1;  

         LED40_ClrBit(2, 1);   // P21 = 0;
        void Delay1000ms(void)        //@40MHz
        {
                unsigned long edata i;

                _nop_();
                _nop_();
                i = 9999998UL;
                while (i)  i--;
        }
        
        LED40_SetBit(2, 1);   // P21 = 1;   

}

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 00:08 , Processed in 0.122712 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表