求助TI M0单片机1700多页的手册没找到寄存器地址

[复制链接]
10322|26
 楼主| yjmwxwx 发表于 2024-6-26 22:01 | 显示全部楼层 |阅读模式

看网上开源平台用LC开发板做制作有机会薅羊毛,但是买个他们的开发板要29元太贵了,于是我自己买了10片MSPM0L1306,然后下载他们开发板开源资料免费打了5个板,现在已经把单片机焊上去了,也能连接JLINK调试器,但是手册我实在是看不懂,是不是我下载错手册了,我下载的是1700多页的参考手册,还用翻译软件翻译成了中文的,结果在里面就是找不到寄存器地址,看着有点头大,以前没用过TI单片机,不知道寄存器地址写在那些手册里面,有没有网友知道寄存器地址在哪个手册查? 怎么感觉TI参考手册有点晦涩难懂,也缺乏实际例子,感觉我这钱要打水飘。。

就是下面这些地址是从哪个手册里面能查到?


参考手册里面只有偏移地址




我下载的是参考手册,TI有没有更详细的手册?

  https://www.ti.com/lit/ug/slau847d/slau847d.pdf?ts=1719376786352&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FMSPM0L1306%253Fbm-verify%253DAAQAAAAJ_____wcjappN2DnUMClpUALyXVgAuZHgrzJMHEGQg56jhP5T0Xf7U1kcNjlMgJZTbFDlDgUToN-IBPFdUfpEUlzGEl5ehmRwXfc-txfIxcIELFiZzQJyH9mwvSrokCUzNbfL05kF-GMKc0hhiE3Q5Hy4Usz2ZD6OYaG8LPMJ5Luz4KLZvP_nnBT7YOtpmay7YIzDDjCW0VLWvCYVDVyGD-SxK9DjmNLDSUgjc_9c3r_eB_UpXRAalUbaifv7DCmyOik9HWtoJPz8WL8ny0eg3TWjnv9oZf3KpqcCiVDLFVmqpk8XPMRKtqgz

用软件翻译成中文版的








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-6-26 23:29 | 显示全部楼层
找到了,原来在数据手册里面




但是IOMUX 寄存器部分还是看不懂,怎么知道哪个IO对应哪个寄存器? 参考手册说让去看数据手册,数据手册说让看参考手册

参考手册就一个寄存器





数据手册



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-6-26 23:58 | 显示全部楼层
实在是不知道怎么看手册,看了好几天不知道IO口怎么设置,不知道哪里能查到不同外设对应的PF值








我猜下面两个有数据的可能是SWD口





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
qintian0303 发表于 2024-6-27 09:05 | 显示全部楼层
你这准备用什么开发啊?不用直接看寄存器啊,能用就行了,有各种demo例程
 楼主| yjmwxwx 发表于 2024-6-27 09:25 | 显示全部楼层
qintian0303 发表于 2024-6-27 09:05
你这准备用什么开发啊?不用直接看寄存器啊,能用就行了,有各种demo例程

我学32位单片机还没学过用C语言开发,所以只能看手册来写程序,但是手册写的有点晦涩难懂
 楼主| yjmwxwx 发表于 2024-6-27 09:34 | 显示全部楼层
本帖最后由 yjmwxwx 于 2024-6-27 09:42 编辑

我猜测SWD口设置是PA19是0x60082 PA20是0X50082 最后PF都是2

SWDIO [2] 这个括号里面的2应该就是SWD对应的PF值,完全是猜测








上图PA19的PINCM20    PA20是PINCM21寄存器偏移是0x04

20乘4= 80 换算成十六进制就是0x50,IOMUX 基址是 0x40428000,这下应该对上了,感觉我猜测的应该对




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
xch 发表于 2024-6-27 10:06 | 显示全部楼层
yjmwxwx 发表于 2024-6-27 09:34
我猜测SWD口设置是PA19是0x60082 PA20是0X50082 最后PF都是2

SWDIO [2] 这个括号里面的2应该就是SWD对应的 ...


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-6-27 12:12 | 显示全部楼层

我理解能力太差了,看TI的手册太吃力
 楼主| yjmwxwx 发表于 2024-6-27 12:15 | 显示全部楼层
丙丁先生 发表于 2024-6-27 11:19
找到TI M0单片机寄存器地址的有效方法包括确保手册的准确性、通过目录或索引快速查找、了解并计算基地址与 ...

这个是AI给出的答案吧,我没用过C开发32位单片机程序所以不懂官方那些库什么的怎么用,只能看手册,但是我理解能力比较差,看TI这个手册比较吃力
 楼主| yjmwxwx 发表于 2024-6-28 10:59 | 显示全部楼层
用PA13开关LED成功
IOMUX 的PINCM寄存器写0X81




  1. @MSPM0L1306
  2.         @编译器ARM-NONE-EABI

  3.         .thumb
  4.         .syntax unified
  5.         .section .text
  6. vectors:
  7.         .word zhanding
  8.         .word kaishi + 1
  9.         .word _nmi        +1
  10.         .word _Hard_Fault +1
  11.         .word 0
  12.         .word 0
  13.         .word 0
  14.         .word 0
  15.         .word 0
  16.         .word 0
  17.         .word 0
  18.         .word _svc_handler +1
  19.         .word 0
  20.         .word 0
  21.         .word _pendsv_handler +1
  22.         .word _systickzhongduan +1  [url=home.php?mod=space&uid=72445]@[/url] 15

  23.        
  24. kaishi:
  25. __IOMUX_she_zhi:       
  26.         ldr r0, = 0x40428000
  27.         movs r1, # 0x38                @pa13
  28.         movs r2, #  0x81
  29.         str r2, [r0, r1]

  30. __GPIO_she_zhi:       
  31.         ldr r0, = 0x400a0000
  32.         ldr r1, = 0x800                @寄存器偏移
  33.         ldr r2, = 0x26000001       
  34.         str r2, [r0, r1]        @开电源
  35.        
  36.         ldr r1, = 0x12c0        @寄存器偏移
  37.         ldr r2, = 0x2000        @pa13
  38.         str r2, [r0, r1]        @使能输出


  39. __led_kaiguan:                        @LED开关
  40.         ldr r1, = 0x120c
  41.         ldr r2, = 0x100                @开
  42.         movs r3, # 0                @关
  43. __led_kaiguan_xunhuan:                @LED开关循环
  44.         str r2, [r0, r1]        @LED开
  45.         ldr r4, = 0x7fffff        @延时时间
  46. __led_kai_yanshi:                @LED开延时
  47.         subs r4, r4, # 1        @延时间减1
  48.         bne __led_kai_yanshi        @不等于0循环
  49.         str r3, [r0,  r1]        @LED关
  50.         ldr r4, = 0x7fffff        @延时时间
  51. __led_guan_yanshi:                @LED关延时
  52.         subs r4, r4, # 1        @延时时间减1
  53.         bne __led_guan_yanshi        @不等于0循环
  54.         b __led_kaiguan_xunhuan        @跳到LED开关循环

  55. _nmi:
  56. _Hard_Fault:
  57. _svc_handler:
  58. _pendsv_handler:       
  59. _systickzhongduan:
  60. aaa:
  61.         bx lr
  62.        
  63.         .section .data
  64.         .equ zhanding,        0x20000100
  65.        






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
cakeL 发表于 2024-6-28 11:54 | 显示全部楼层
没玩过
 楼主| yjmwxwx 发表于 2024-6-29 08:38 | 显示全部楼层

性价比不行竞争不过国产的
 楼主| yjmwxwx 发表于 2024-7-7 11:58 | 显示全部楼层
我真不是黑TI,感觉这手册写的真不如国产的。。
定时器输出PWM部分例子里面还有错的地方

寄存器表里面的COC


输出PWM例子里面的



低级错误多打两个FF

PA13输出PWM成功
  1. __IOMUX_she_zhi:
  2.         ldr r0, = 0x40428000
  3.         movs r1, # 0x38         @pa13
  4.         ldr r2, =   0x83        @PA13 TIMG0_C1
  5.         str r2, [r0, r1]


  6. __TIMG0:
  7.         ldr r0, = 0x40084000    @寄存器基址
  8.         ldr r1, = 0x800         @寄存器偏移
  9.         ldr r2, = 0x26000001
  10.         str r2, [r0, r1]        @开电源


  11.         ldr r1, = 0x1008        @CLKSEL
  12.         movs r2, # 0x08
  13.         str r2, [r0, r1]        @时钟选择


  14.         ldr r1, = 0x1100        @CCPD
  15.         movs r2, # 0x02
  16.         str r2, [r0, r1]        @c1输出


  17.         ldr r1, = 0x1808        @LOAD寄存器
  18.         ldr r2, = 0xffff
  19.         str r2, [r0, r1]        @写入定时器最大计数值

  20.         ldr r1, = 0x1814        @CC_01[y]
  21.         ldr r2, = 0x7fff        @PWM占空比
  22.         str r2, [r0, r1]        @比较寄存器


  23.         ldr r1, = 0x1874        @CCACT
  24.         ldr r2, = 0x50          @CDACT=1,LACT=2
  25.        str r2, [r0, r1]         @设置比较模式



  26.         ldr r1, = 0x1804        @CTRCTL
  27.         movs r2, # 0x03
  28.         str r2, [r0, r1]        @ 开定时器




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-7-10 11:36 | 显示全部楼层
我理解能力太差了,ADC又遇到问题,怎么配置都没法采样,我不懂官方软件工具怎么安装和编译,有没有网友给个官方ADC例子的固件,看看官方软件怎么配置的
这个寄存器序列能写的只有前面四个,0x1180到0x118c后面的全都没法写入数据,不知道是不是我理解错了






只能写前面四个,后面都没法写入


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-7-11 09:13 | 显示全部楼层
ADC采样成功,原来是时钟寄存器设置错了。 四个都采集ADC通道A0,A0接1K电阻到3.3V
采集到的结果


程序

  1. __adc0:
  2.         ldr r0, = 0x40004000    @寄存器基址
  3.         ldr r1, = 0x800         @寄存器偏移
  4.         ldr r2, = 0x26000001
  5.         str r2, [r0, r1]        @开电源

  6.         ldr r1, = 0x808
  7.         ldr r2, = 0xa9000002
  8.         str r2, [r0, r1]


  9. @       ldr r1, = 0x1184        @MEMCTL 转换存储器控制寄存器
  10. @       ldr r2, = 1
  11. @       str r2, [r0, r1]        @通道选择

  12.         ldr r1, = 0x1110        @CLKFREQ 采样时钟范围
  13.         movs r2, # 5
  14.         str r2, [r0, r1]

  15.         ldr r1, = 0x1104        @CTL1 控制寄存器1
  16.         ldr r2, = 0x30100
  17.         str r2, [r0, r1]        @序列重复转换

  18.         ldr r1, = 0x1108        @CTL2控制寄存器2
  19.         ldr r2, = 0x3000000
  20.         str r2, [r0, r1]        @转换序列选择

  21.         ldr r1, = 0x1100        @CTL0 控制寄存器 0
  22.         ldr r2, = 0x10001
  23.         str r2, [r0, r1]


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-7-13 12:08 | 显示全部楼层
DMA设置成功,TIMG4触发ADC采样,采集A0和A1,通过DMA把两个32位传输到0X20000100,DMA重复模式,传输长度12个64位数
传输源两个32位数


传输到0x20000100,传输12个64位数


程序


  1. __TIMG4:
  2.         @ADC触发源
  3.         ldr r0, = 0x4008c000        @寄存器基址
  4.         ldr r1, = 0x800                @寄存器偏移
  5.         ldr r2, = 0x26000001       
  6.         str r2, [r0, r1]        @开电源

  7.        
  8.         ldr r1, = 0x1008        @CLKSEL
  9.         movs r2, # 0x08
  10.         str r2, [r0, r1]        @时钟选择

  11.        
  12.         ldr r1, = 0x1058        @IMASK
  13.                                 @GEN_EVENT0
  14.         movs r2, # 0x01
  15.         str r2, [r0, r1]        @触发ADC

  16.         ldr r1, = 0x444                @FPUB_0
  17.         movs r2, # 0x01
  18.         str r2, [r0, r1]        @发布事件1

  19.        
  20.         ldr r1, = 0x1808        @LOAD寄存器
  21.         ldr r2, = 319                @触发频率100KHZ
  22.         str r2, [r0, r1]        @写入定时器最大计数值
  23.        
  24.         ldr r1, = 0x1804        @CTRCTL
  25.         movs r2, # 0x03
  26.         str r2, [r0, r1]        @ 开定时器

  27.        
  28. __dma0:
  29.         ldr r0, = 0x4042a000        @DMA寄存器基址
  30.         ldr r1, = 0x1110        @DMATCTL寄存器偏移地址
  31.         movs r2, # 0x03                @adc0 触发通道选择
  32.         str r2, [r0, r1]


  33.         ldr r1, = 0x1204        @DMASA寄存器偏移地址
  34.         ldr r2, = 0x4055a280        @传输源地址,ADC别名区
  35.         str r2, [r0, r1]

  36.         ldr r1, = 0x1208        @DMADA寄存器偏移地址
  37.         ldr r2, = dianyabiao    @传输目标地址
  38.         str r2, [r0, r1]

  39.         ldr r1, = 0x120c        @DMASZ寄存器偏移地址
  40.         ldr r2, = 12                @传输数量
  41.         str r2, [r0, r1]

  42.         ldr r1, = 0x1200        @DACCTL控制寄存器偏移地址
  43.         ldr r2, = 0x20303302        @0x20301102       
  44.         str r2, [r0, r1]        @开DMA,设置传输模式
  45.        
  46. __adc0:
  47.         ldr r0, = 0x40004000        @寄存器基址
  48.         ldr r1, = 0x800                @寄存器偏移
  49.         ldr r2, = 0x26000001       
  50.         str r2, [r0, r1]        @开电源

  51.         ldr r1, = 0x400                @FSUB_0
  52.         movs r2, # 0x01
  53.         str r2, [r0, r1]        @订阅TIM发布的事件1

  54.         ldr r1, = 0x808                @CLKCFG  ADC时钟配置寄存器
  55.         ldr r2, = 0xa9000002
  56.         str r2, [r0, r1]

  57.         ldr r1, = 0x1088        @IMASK
  58.                                 @DMA_TRIG
  59.         ldr r2, = 0x200
  60.         str r2, [r0, r1]        @那个通道触发DMA

  61.         ldr r1, = 0x1110        @CLKFREQ 采样时钟范围
  62.         movs r2, # 5
  63.         str r2, [r0, r1]

  64.         ldr r1, = 0x1104          @CTL1 控制寄存器1
  65.         ldr r2, = 0x30001        @硬件触发
  66.         str r2, [r0, r1]        @序列重复转换

  67.         ldr r1, = 0x1108        @CTL2控制寄存器2
  68.         ldr r2, = 0x3000900        @0x3000900
  69.         str r2, [r0, r1]         @转换序列选择

  70.         ldr r1, = 0x1184        @MEMCTL 转换存储器控制寄存器
  71.         movs r2, # 0x01                @通道A1
  72.         str r2, [r0, r1]        @
  73.        
  74.         ldr r1, = 0x1100          @CTL0 控制寄存器 0
  75.         ldr r2, = 0x10001
  76.         str r2, [r0, r1]   





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-7-14 22:14 | 显示全部楼层
本帖最后由 yjmwxwx 于 2024-7-14 23:06 编辑

学到内置运放了,但是感觉是不是少个寄存器的描述?? 是不是写手册时候忘记加了?











实测偏移0x1104的地址能写0x05


我是真不会猜哪个是设置寄存器,下边这俩寄存器手册里面都没介绍。




可能是觉得用户不用改这两个,配置内部运放采集电压后ADC采集然后传输到内存成功,用的是OPA1,+输入接要采集的电压











本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-7-16 20:38 | 显示全部楼层
驱动COG12864成功,学了十多天总算是能用了,最开始那片不知道怎么搞的不能自己复位了,幸亏买了10片
显示计数数值




电路连接
PA6 SCK
PA5 MOSI
PA4 RST
PA3 A0

程序


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-7-18 19:10 | 显示全部楼层
擦除和写FLASH,先擦FC00再把0X12345678写进去



  1. kaishi:
  2.         bkpt # 1

  3. __flash:
  4.        
  5.         ldr r0, = 0x400cd000        @FLASH基地址
  6. __ca_chu_flash:                @擦FLASH
  7.         ldr r1, = 0x1104        @CMDTYPE
  8.         movs r2, # 0x02                @擦FLASH
  9.         str r2, [r0, r1]

  10.         ldr r1, = 0x1120        @CMDADDR
  11.         ldr r2, = 0xfc00        @要写的地址
  12.         str r2, [r0, r1]

  13.         ldr r1, = 0x11d4        @STATCMD
  14.         movs r2, # 0
  15.         str r2, [r0, r1]        @解除写保护

  16.         ldr r1, = 0x1100        @CMDEXEC
  17.         movs r2, # 0x01
  18.         str r2, [r0, r1]        @执行
  19.         bkpt # 3
  20.        
  21. __xie_flash_chegn_xu:        @写FLASH
  22.         ldr r1, = 0x1104        @CMDTYPE
  23.         movs r2, # 0x01                @写
  24.         str r2, [r0, r1]

  25.         ldr r1, = 0x1120        @CMDADDR
  26.         ldr r2, = 0xfc00        @要写的地址
  27.         str r2, [r0, r1]

  28.         ldr r1, = 0x1130        @CMDDATA0
  29.         ldr r2, = 0x12345678        @要写的数据
  30.         str r2, [r0, r1]

  31.         ldr r1, = 0x1124        @CMDBYTEN
  32.         ldr r2, = 0XFFFF        @要写入的字节位置
  33.         str r2, [r0, r1]       
  34.        
  35.         ldr r1, = 0x11d4        @STATCMD
  36.         movs r2, # 0
  37.         str r2, [r0, r1]        @解除写保护
  38.        
  39.        
  40.         ldr r1, = 0x1100        @CMDEXEC
  41.         movs r2, # 0x01
  42.         str r2, [r0, r1]        @执行

  43.         bkpt # 2





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
stm32xiaobai 发表于 2024-10-23 16:49 | 显示全部楼层
除了51单片机那种需要操作寄存器来编程,ST,TI的应该都有库函数包装了的,直接调用函数就行了。比如简单的你要把PA1置高,调用库函数GPIO_SetBits(GPIOA,GPIO_Pin_1)就行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

123

主题

2973

帖子

54

粉丝
快速回复 在线客服 返回列表 返回顶部