找回密码
 立即注册
查看: 188|回复: 5

各位大佬有没有硬件IIC(使用DMA)的例程,我自己的程序死活驱动不了OLED

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-28 14:45:49
已绑定手机

3

主题

14

回帖

101

积分

注册会员

积分
101
发表于 2025-3-26 01:53:51 来自手机 | 显示全部楼层 |阅读模式
事情是这样的,看AI8051U的手册里面,讲DMA_I2CT的部分(我也是只需要发送功能就行了),感觉没有讲的很明白:

1,如果使能硬件IICT的DMA,那么IIC的时序部分也是由DMA托管了是吗,不需要我们手动触发起始和停止条件了是吗?

2,硬件IICT的DMA的发送地址寄存器TXAH和TXAL这个地址是指xdata u16*还是xdata u16**?如果有xdata u8 array[256],我看SPI的示例程序是把(u8)(&array)赋值给了TXAL,把(u8)((u16)&array>>8)赋值给XTAH。

3.DMA_I2C_ST说是“传输字节控制”,可是前面不是已经有DMA_I2CT_AMT和DMA_I2CR_AMT了吗,没搞懂这个寄存器是干嘛的
有懂得佬踢一下我感谢
我爱STC
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-26 01:58:00 | 显示全部楼层
针对您提出的关于AI8051U硬件IIC使用DMA驱动OLED的问题,以下是对您问题的详细解答:

1. 硬件IIC的DMA托管时序:
当使能硬件IIC的DMA功能后,IIC的时序部分确实由DMA托管。这意味着起始条件、停止条件以及数据传输的时序控制都由硬件自动完成,无需手动触发。您只需配置好DMA传输的相关参数,硬件会自动处理IIC的时序。

2. 发送地址寄存器TXAH和TXAL的地址类型:
TXAH和TXAL用于指定DMA传输的起始地址。对于xdata u8 array,您需要将数组的地址低8位赋值给TXAL,将地址高8位赋值给TXAH。具体操作如下:
  
  1. c
  2.    TXAL = (u8)(&array);
  3.    TXAH = (u8)((u16)&array >> 8);
复制代码
   这里,&array是数组的首地址,将其强制转换为u16类型后,分别取低8位和高8位赋值给TXAL和TXAH。

3. DMAI2CST寄存器的功能:
DMAI2CST寄存器用于控制传输的字节数。尽管DMAI2CTAMT和DMAI2CRAMT寄存器也涉及传输字节数的控制,但DMAI2CST寄存器通常用于在传输过程中动态调整或监控传输的字节数。具体功能可能因芯片设计而异,建议查阅芯片手册以获取更详细的说明。

总结:
在配置硬件IIC的DMA时,确保正确设置TXAH和TXAL寄存器,以指向正确的数据传输地址。同时,理解并合理使用DMAI2CST寄存器,以确保数据传输的准确性和完整性。通过正确配置这些寄存器,您的程序应能成功驱动OLED。

如需进一步调试,建议使用调试工具逐步检查寄存器的配置和传输过程,以确保每一步都按预期执行。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-26 06:18:34 | 显示全部楼层
unsigned char xdata xxx[] _at_ 0x****
这样在指定地址声明xdata数组
或者不用_at_,让编译器自动分配地址,然后用&取址送给TXAH和TXAL
DMA是批量发送数据阶段使用的,起始和停止还有设备地址这些还是要直接写寄存器操作的
还包括OLED的设置内存寻址模式、设置列地址、设置页地址等操作
一般使用DMA_I2CT_AMT设置发送字节数,没用过DMA_I2C_ST

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:163
  • 最近打卡:2025-05-02 13:26:59
已绑定手机

56

主题

1319

回帖

2942

积分

荣誉版主

无情的代码机器

积分
2942
发表于 2025-3-26 08:21:22 | 显示全部楼层
这个例程包里有例子APP_DMA_I2C
https://www.stcaimcu.com/forum.p ... mp;extra=#pid143974
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-28 14:45:49
已绑定手机

3

主题

14

回帖

101

积分

注册会员

积分
101
发表于 2025-3-26 11:22:38 | 显示全部楼层
Debu*** 发表于 2025-3-26 06:18
unsigned char xdata xxx[] _at_ 0x****
这样在指定地址声明xdata数组
或者不用_at_,让编译器自动分配地址 ...

好的,谢谢您
我爱STC
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-28 14:45:49
已绑定手机

3

主题

14

回帖

101

积分

注册会员

积分
101
发表于 2025-3-26 11:23:02 | 显示全部楼层
erci*** 发表于 2025-3-26 08:21
这个例程包里有例子APP_DMA_I2C
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=14189&highlight= ...

好的,我看一看
我爱STC
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:29 , Processed in 0.151824 second(s), 80 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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