求助TI M0单片机1700多页的手册没找到寄存器地址
看网上开源平台用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
用软件翻译成中文版的
找到了,原来在数据手册里面
但是IOMUX 寄存器部分还是看不懂,怎么知道哪个IO对应哪个寄存器? 参考手册说让去看数据手册,数据手册说让看参考手册
参考手册就一个寄存器
数据手册
实在是不知道怎么看手册,看了好几天不知道IO口怎么设置,不知道哪里能查到不同外设对应的PF值
我猜下面两个有数据的可能是SWD口
你这准备用什么开发啊?不用直接看寄存器啊,能用就行了,有各种demo例程 qintian0303 发表于 2024-6-27 09:05
你这准备用什么开发啊?不用直接看寄存器啊,能用就行了,有各种demo例程
我学32位单片机还没学过用C语言开发,所以只能看手册来写程序,但是手册写的有点晦涩难懂 本帖最后由 yjmwxwx 于 2024-6-27 09:42 编辑
我猜测SWD口设置是PA19是0x60082 PA20是0X50082 最后PF都是2
SWDIO 这个括号里面的2应该就是SWD对应的PF值,完全是猜测
上图PA19的PINCM20 PA20是PINCM21寄存器偏移是0x04
20乘4= 80 换算成十六进制就是0x50,IOMUX 基址是 0x40428000,这下应该对上了,感觉我猜测的应该对
yjmwxwx 发表于 2024-6-27 09:34
我猜测SWD口设置是PA19是0x60082 PA20是0X50082 最后PF都是2
SWDIO 这个括号里面的2应该就是SWD对应的 ...
找到TI M0单片机寄存器地址的有效方法包括确保手册的准确性、通过目录或索引快速查找、了解并计算基地址与偏移量、掌握位带操作、利用开发环境和社区资源等。 xch 发表于 2024-6-27 10:06
我理解能力太差了,看TI的手册太吃力 丙丁先生 发表于 2024-6-27 11:19
找到TI M0单片机寄存器地址的有效方法包括确保手册的准确性、通过目录或索引快速查找、了解并计算基地址与 ...
这个是AI给出的答案吧,我没用过C开发32位单片机程序所以不懂官方那些库什么的怎么用,只能看手册,但是我理解能力比较差,看TI这个手册比较吃力 用PA13开关LED成功
IOMUX 的PINCM寄存器写0X81
@MSPM0L1306
@编译器ARM-NONE-EABI
.thumb
.syntax unified
.section .text
vectors:
.word zhanding
.word kaishi + 1
.word _nmi +1
.word _Hard_Fault +1
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word _svc_handler +1
.word 0
.word 0
.word _pendsv_handler +1
.word _systickzhongduan +1@ 15
kaishi:
__IOMUX_she_zhi:
ldr r0, = 0x40428000
movs r1, # 0x38 @pa13
movs r2, #0x81
str r2,
__GPIO_she_zhi:
ldr r0, = 0x400a0000
ldr r1, = 0x800 @寄存器偏移
ldr r2, = 0x26000001
str r2, @开电源
ldr r1, = 0x12c0 @寄存器偏移
ldr r2, = 0x2000 @pa13
str r2, @使能输出
__led_kaiguan: @LED开关
ldr r1, = 0x120c
ldr r2, = 0x100 @开
movs r3, # 0 @关
__led_kaiguan_xunhuan: @LED开关循环
str r2, @LED开
ldr r4, = 0x7fffff @延时时间
__led_kai_yanshi: @LED开延时
subs r4, r4, # 1 @延时间减1
bne __led_kai_yanshi @不等于0循环
str r3, @LED关
ldr r4, = 0x7fffff @延时时间
__led_guan_yanshi: @LED关延时
subs r4, r4, # 1 @延时时间减1
bne __led_guan_yanshi @不等于0循环
b __led_kaiguan_xunhuan @跳到LED开关循环
_nmi:
_Hard_Fault:
_svc_handler:
_pendsv_handler:
_systickzhongduan:
aaa:
bx lr
.section .data
.equ zhanding, 0x20000100
没玩过 cakeL 发表于 2024-6-28 11:54
没玩过
性价比不行竞争不过国产的 我真不是黑TI,感觉这手册写的真不如国产的。。
定时器输出PWM部分例子里面还有错的地方
寄存器表里面的COC
输出PWM例子里面的
低级错误多打两个FF
PA13输出PWM成功
__IOMUX_she_zhi:
ldr r0, = 0x40428000
movs r1, # 0x38 @pa13
ldr r2, = 0x83 @PA13 TIMG0_C1
str r2,
__TIMG0:
ldr r0, = 0x40084000 @寄存器基址
ldr r1, = 0x800 @寄存器偏移
ldr r2, = 0x26000001
str r2, @开电源
ldr r1, = 0x1008 @CLKSEL
movs r2, # 0x08
str r2, @时钟选择
ldr r1, = 0x1100 @CCPD
movs r2, # 0x02
str r2, @c1输出
ldr r1, = 0x1808 @LOAD寄存器
ldr r2, = 0xffff
str r2, @写入定时器最大计数值
ldr r1, = 0x1814 @CC_01
ldr r2, = 0x7fff @PWM占空比
str r2, @比较寄存器
ldr r1, = 0x1874 @CCACT
ldr r2, = 0x50 @CDACT=1,LACT=2
str r2, @设置比较模式
ldr r1, = 0x1804 @CTRCTL
movs r2, # 0x03
str r2, @ 开定时器
我理解能力太差了,ADC又遇到问题,怎么配置都没法采样,我不懂官方软件工具怎么安装和编译,有没有网友给个官方ADC例子的固件,看看官方软件怎么配置的
这个寄存器序列能写的只有前面四个,0x1180到0x118c后面的全都没法写入数据,不知道是不是我理解错了
只能写前面四个,后面都没法写入
ADC采样成功,原来是时钟寄存器设置错了。 四个都采集ADC通道A0,A0接1K电阻到3.3V
采集到的结果
程序
__adc0:
ldr r0, = 0x40004000 @寄存器基址
ldr r1, = 0x800 @寄存器偏移
ldr r2, = 0x26000001
str r2, @开电源
ldr r1, = 0x808
ldr r2, = 0xa9000002
str r2,
@ ldr r1, = 0x1184 @MEMCTL 转换存储器控制寄存器
@ ldr r2, = 1
@ str r2, @通道选择
ldr r1, = 0x1110 @CLKFREQ 采样时钟范围
movs r2, # 5
str r2,
ldr r1, = 0x1104 @CTL1 控制寄存器1
ldr r2, = 0x30100
str r2, @序列重复转换
ldr r1, = 0x1108 @CTL2控制寄存器2
ldr r2, = 0x3000000
str r2, @转换序列选择
ldr r1, = 0x1100 @CTL0 控制寄存器 0
ldr r2, = 0x10001
str r2,
DMA设置成功,TIMG4触发ADC采样,采集A0和A1,通过DMA把两个32位传输到0X20000100,DMA重复模式,传输长度12个64位数
传输源两个32位数
传输到0x20000100,传输12个64位数
程序
__TIMG4:
@ADC触发源
ldr r0, = 0x4008c000 @寄存器基址
ldr r1, = 0x800 @寄存器偏移
ldr r2, = 0x26000001
str r2, @开电源
ldr r1, = 0x1008 @CLKSEL
movs r2, # 0x08
str r2, @时钟选择
ldr r1, = 0x1058 @IMASK
@GEN_EVENT0
movs r2, # 0x01
str r2, @触发ADC
ldr r1, = 0x444 @FPUB_0
movs r2, # 0x01
str r2, @发布事件1
ldr r1, = 0x1808 @LOAD寄存器
ldr r2, = 319 @触发频率100KHZ
str r2, @写入定时器最大计数值
ldr r1, = 0x1804 @CTRCTL
movs r2, # 0x03
str r2, @ 开定时器
__dma0:
ldr r0, = 0x4042a000 @DMA寄存器基址
ldr r1, = 0x1110 @DMATCTL寄存器偏移地址
movs r2, # 0x03 @adc0 触发通道选择
str r2,
ldr r1, = 0x1204 @DMASA寄存器偏移地址
ldr r2, = 0x4055a280 @传输源地址,ADC别名区
str r2,
ldr r1, = 0x1208 @DMADA寄存器偏移地址
ldr r2, = dianyabiao @传输目标地址
str r2,
ldr r1, = 0x120c @DMASZ寄存器偏移地址
ldr r2, = 12 @传输数量
str r2,
ldr r1, = 0x1200 @DACCTL控制寄存器偏移地址
ldr r2, = 0x20303302 @0x20301102
str r2, @开DMA,设置传输模式
__adc0:
ldr r0, = 0x40004000 @寄存器基址
ldr r1, = 0x800 @寄存器偏移
ldr r2, = 0x26000001
str r2, @开电源
ldr r1, = 0x400 @FSUB_0
movs r2, # 0x01
str r2, @订阅TIM发布的事件1
ldr r1, = 0x808 @CLKCFGADC时钟配置寄存器
ldr r2, = 0xa9000002
str r2,
ldr r1, = 0x1088 @IMASK
@DMA_TRIG
ldr r2, = 0x200
str r2, @那个通道触发DMA
ldr r1, = 0x1110 @CLKFREQ 采样时钟范围
movs r2, # 5
str r2,
ldr r1, = 0x1104 @CTL1 控制寄存器1
ldr r2, = 0x30001 @硬件触发
str r2, @序列重复转换
ldr r1, = 0x1108 @CTL2控制寄存器2
ldr r2, = 0x3000900 @0x3000900
str r2, @转换序列选择
ldr r1, = 0x1184 @MEMCTL 转换存储器控制寄存器
movs r2, # 0x01 @通道A1
str r2, @
ldr r1, = 0x1100 @CTL0 控制寄存器 0
ldr r2, = 0x10001
str r2,
本帖最后由 yjmwxwx 于 2024-7-14 23:06 编辑
学到内置运放了,但是感觉是不是少个寄存器的描述?? 是不是写手册时候忘记加了?
实测偏移0x1104的地址能写0x05
我是真不会猜哪个是设置寄存器,下边这俩寄存器手册里面都没介绍。
可能是觉得用户不用改这两个,配置内部运放采集电压后ADC采集然后传输到内存成功,用的是OPA1,+输入接要采集的电压
驱动COG12864成功,学了十多天总算是能用了,最开始那片不知道怎么搞的不能自己复位了,幸亏买了10片
显示计数数值
电路连接
PA6 SCK
PA5 MOSI
PA4 RST
PA3 A0
程序
擦除和写FLASH,先擦FC00再把0X12345678写进去
kaishi:
bkpt # 1
__flash:
ldr r0, = 0x400cd000 @FLASH基地址
__ca_chu_flash: @擦FLASH
ldr r1, = 0x1104 @CMDTYPE
movs r2, # 0x02 @擦FLASH
str r2,
ldr r1, = 0x1120 @CMDADDR
ldr r2, = 0xfc00 @要写的地址
str r2,
ldr r1, = 0x11d4 @STATCMD
movs r2, # 0
str r2, @解除写保护
ldr r1, = 0x1100 @CMDEXEC
movs r2, # 0x01
str r2, @执行
bkpt # 3
__xie_flash_chegn_xu: @写FLASH
ldr r1, = 0x1104 @CMDTYPE
movs r2, # 0x01 @写
str r2,
ldr r1, = 0x1120 @CMDADDR
ldr r2, = 0xfc00 @要写的地址
str r2,
ldr r1, = 0x1130 @CMDDATA0
ldr r2, = 0x12345678 @要写的数据
str r2,
ldr r1, = 0x1124 @CMDBYTEN
ldr r2, = 0XFFFF @要写入的字节位置
str r2,
ldr r1, = 0x11d4 @STATCMD
movs r2, # 0
str r2, @解除写保护
ldr r1, = 0x1100 @CMDEXEC
movs r2, # 0x01
str r2, @执行
bkpt # 2
页:
[1]
2