找回密码
 立即注册
楼主: wuzhengmin

有关DMA,山东大学陈桂友教授

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-17 12:27:47 | 显示全部楼层
接着就自动产生项目框架:

截图202601171227452338.jpg
截图202601171228204026.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-17 12:31:27 | 显示全部楼层
看看主函数:

截图202601171229071036.jpg
截图202601171230174649.jpg
截图202601171230478853.jpg
截图202601171231243507.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-17 12:33:44 | 显示全部楼层
这里我们肯定有点不习惯


////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
    EnableAccessXFR();                  //使能访问扩展XFR
    AccessCodeFastest();                //设置最快速度访问程序代码
    AccessIXramFastest();               //设置最快速度访问内部XDATA
    IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基

    //<<AICUBE_USER_PREINITIAL_CODE_BEGIN>>
    // 在此添加用户预初始化代码  
    //<<AICUBE_USER_PREINITIAL_CODE_END>>

    PORT3_Init();                       //P3口初始化
    CLK_Init();                         //时钟模块初始化
    delay_ms(1);
    USBLIB_Init();                      //USB库初始化
    delay_ms(1);

    //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_INITIAL_CODE_END>>

    EnableGlobalInt();                  //使能全局中断
}


之前都是直接对寄存器操作,现在看上去都是函数:


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-17 12:35:21 | 显示全部楼层
例如EnableAccessXFR();                  //使能访问扩展XFR

我们打开这个函数看看:

截图202601171235166811.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-17 12:38:09 | 显示全部楼层
是在Ai8051u_def.h里定义的

而这个Ai8051u_def.h,会在config.h里包含:



截图202601171238076791.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-17 12:41:12 | 显示全部楼层
单说这一句定义:

#define EnableAccessXFR()               SET_REG_BIT(P_SW2, EAXFR_MSK)

肯定要去追寻 SET_REG_BIT(P_SW2, EAXFR_MSK):

截图202601171241099372.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-17 12:43:30 | 显示全部楼层
偶,原来是在def.h定义:

#define SET_REG_BIT(r, b)       ((r) |= (b))

((r) |= (b))是什么?
截图202601171243142423.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-17 12:45:48 | 显示全部楼层
真没找到!
截图202601171245444199.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-17 12:51:23 | 显示全部楼层
其实我觉得80% 的可能就是这一句:

EAXFR = 1;                                        //允许访问扩展的特殊寄存器,XFR

只要不出错,能正常运行就可以啦,时代变了,以后都是Ai,哪里能每一句都看懂?

不过要是真正帮人开发项目,还是不要啦,太心虚..........

这句大家都搞的懂,就怕细微的地方出问题!

先不管,加点东西进去,看看能否正常动起来!


接着回去添加Time0

截图202601171254214293.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-17 13:01:56 | 显示全部楼层
  1. //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
  2. ////////////////////////////////////////
  3. // 在此添加用户文件头说明信息  
  4. // 文件名称: timer.c
  5. // 文件描述:
  6. // 文件版本: V1.0
  7. // 修改记录:
  8. //   1. (2026-01-17) 创建文件
  9. ////////////////////////////////////////
  10. //<<AICUBE_USER_HEADER_REMARK_END>>
  11. #include "config.h"
  12. //<<AICUBE_USER_INCLUDE_BEGIN>>
  13. // 在此添加用户头文件包含  
  14. //<<AICUBE_USER_INCLUDE_END>>
  15. //<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
  16. // 在此添加用户全局变量定义、用户宏定义以及函数声明  
  17. //<<AICUBE_USER_GLOBAL_DEFINE_END>>
  18. ////////////////////////////////////////
  19. // 定时器0初始化函数
  20. // 入口参数: 无
  21. // 函数返回: 无
  22. ////////////////////////////////////////
  23. void TIMER0_Init(void)
  24. {
  25. #define T0_PSCR                 (102)
  26. #define T0_RELOAD               (65536 - (float)SYSCLK / 12 / (T0_PSCR + 1) * 2 / 1) //定时周期2秒
  27.     TIMER0_TimerMode();                 //设置定时器0为定时模式
  28.     TIMER0_12TMode();                   //设置定时器0为12T模式
  29.     TIMER0_Mode0();                     //设置定时器0为模式0 (16位自动重载模式)
  30.     TIMER0_DisableGateINT0();           //禁止定时器0门控
  31.     TIMER0_SetIntPriority(0);           //设置中断为最低优先级
  32.     TIMER0_EnableInt();                 //使能定时器0中断
  33.     TIMER0_SetPrescale(T0_PSCR);        //设置定时器0的8位预分频
  34.     TIMER0_SetReload16(T0_RELOAD);      //设置定时器0的16位重载值
  35.     TIMER0_Run();                       //定时器0开始运行
  36.     //<<AICUBE_USER_TIMER0_INITIAL_BEGIN>>
  37.     // 在此添加用户初始化代码  
  38.     //<<AICUBE_USER_TIMER0_INITIAL_END>>
  39. }
  40. ////////////////////////////////////////
  41. // 定时器0中断服务程序
  42. // 入口参数: 无
  43. // 函数返回: 无
  44. ////////////////////////////////////////
  45. void TIMER0_ISR(void) interrupt TMR0_VECTOR
  46. {
  47.     //<<AICUBE_USER_TIMER0_ISR_CODE1_BEGIN>>
  48.     // 在此添加中断函数用户代码  
  49.     //<<AICUBE_USER_TIMER0_ISR_CODE1_END>>
  50. }
  51. //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
  52. // 在此添加用户函数实现代码  
  53. //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
复制代码
重新生成(增加了Time0)

先看看上面的timer.c:是不是不能说看不懂,但心里不习惯,没有自己给寄存器赋值踏实的感觉有没有?


回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-4-1 08:08 , Processed in 0.111363 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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