打印

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

[复制链接]
5762|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

用软件翻译成中文版的

MSPM0L参考手册.pdf (13.89 MB)






使用特权

评论回复

相关帖子

沙发
yjmwxwx|  楼主 | 2024-6-26 23:29 | 只看该作者
找到了,原来在数据手册里面




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

参考手册就一个寄存器





数据手册



使用特权

评论回复
板凳
yjmwxwx|  楼主 | 2024-6-26 23:58 | 只看该作者
实在是不知道怎么看手册,看了好几天不知道IO口怎么设置,不知道哪里能查到不同外设对应的PF值








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





使用特权

评论回复
地板
qintian0303| | 2024-6-27 09:05 | 只看该作者
你这准备用什么开发啊?不用直接看寄存器啊,能用就行了,有各种demo例程

使用特权

评论回复
5
yjmwxwx|  楼主 | 2024-6-27 09:25 | 只看该作者
qintian0303 发表于 2024-6-27 09:05
你这准备用什么开发啊?不用直接看寄存器啊,能用就行了,有各种demo例程

我学32位单片机还没学过用C语言开发,所以只能看手册来写程序,但是手册写的有点晦涩难懂

使用特权

评论回复
6
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,这下应该对上了,感觉我猜测的应该对




使用特权

评论回复
7
xch| | 2024-6-27 10:06 | 只看该作者
yjmwxwx 发表于 2024-6-27 09:34
我猜测SWD口设置是PA19是0x60082 PA20是0X50082 最后PF都是2

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


使用特权

评论回复
8
丙丁先生| | 2024-6-27 11:19 | 只看该作者
找到TI M0单片机寄存器地址的有效方法包括确保手册的准确性、通过目录或索引快速查找、了解并计算基地址与偏移量、掌握位带操作、利用开发环境和社区资源等。

使用特权

评论回复
9
yjmwxwx|  楼主 | 2024-6-27 12:12 | 只看该作者

我理解能力太差了,看TI的手册太吃力

使用特权

评论回复
10
yjmwxwx|  楼主 | 2024-6-27 12:15 | 只看该作者
丙丁先生 发表于 2024-6-27 11:19
找到TI M0单片机寄存器地址的有效方法包括确保手册的准确性、通过目录或索引快速查找、了解并计算基地址与 ...

这个是AI给出的答案吧,我没用过C开发32位单片机程序所以不懂官方那些库什么的怎么用,只能看手册,但是我理解能力比较差,看TI这个手册比较吃力

使用特权

评论回复
11
yjmwxwx|  楼主 | 2024-6-28 10:59 | 只看该作者
用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  [url=home.php?mod=space&uid=72445]@[/url] 15

       
kaishi:
__IOMUX_she_zhi:       
        ldr r0, = 0x40428000
        movs r1, # 0x38                @pa13
        movs r2, #  0x81
        str r2, [r0, r1]

__GPIO_she_zhi:       
        ldr r0, = 0x400a0000
        ldr r1, = 0x800                @寄存器偏移
        ldr r2, = 0x26000001       
        str r2, [r0, r1]        @开电源
       
        ldr r1, = 0x12c0        @寄存器偏移
        ldr r2, = 0x2000        @pa13
        str r2, [r0, r1]        @使能输出


__led_kaiguan:                        @LED开关
        ldr r1, = 0x120c
        ldr r2, = 0x100                @开
        movs r3, # 0                @关
__led_kaiguan_xunhuan:                @LED开关循环
        str r2, [r0, r1]        @LED开
        ldr r4, = 0x7fffff        @延时时间
__led_kai_yanshi:                @LED开延时
        subs r4, r4, # 1        @延时间减1
        bne __led_kai_yanshi        @不等于0循环
        str r3, [r0,  r1]        @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
       





led.zip (1.71 KB)

使用特权

评论回复
12
cakeL| | 2024-6-28 11:54 | 只看该作者
没玩过

使用特权

评论回复
13
yjmwxwx|  楼主 | 2024-6-29 08:38 | 只看该作者

性价比不行竞争不过国产的

使用特权

评论回复
14
yjmwxwx|  楼主 | 2024-7-7 11:58 | 只看该作者
我真不是黑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, [r0, r1]


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


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


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


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

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


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



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


TIM.zip (4.35 KB)

使用特权

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






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


使用特权

评论回复
16
yjmwxwx|  楼主 | 2024-7-11 09:13 | 只看该作者
ADC采样成功,原来是时钟寄存器设置错了。 四个都采集ADC通道A0,A0接1K电阻到3.3V
采集到的结果


程序

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

        ldr r1, = 0x808
        ldr r2, = 0xa9000002
        str r2, [r0, r1]


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

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

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

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

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


使用特权

评论回复
17
yjmwxwx|  楼主 | 2024-7-13 12:08 | 只看该作者
DMA设置成功,TIMG4触发ADC采样,采集A0和A1,通过DMA把两个32位传输到0X20000100,DMA重复模式,传输长度12个64位数
传输源两个32位数


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


程序
dma.zip (6.29 KB)

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

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

       
        ldr r1, = 0x1058        @IMASK
                                @GEN_EVENT0
        movs r2, # 0x01
        str r2, [r0, r1]        @触发ADC

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

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

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


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

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

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

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

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

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

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

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

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

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

        ldr r1, = 0x1184        @MEMCTL 转换存储器控制寄存器
        movs r2, # 0x01                @通道A1
        str r2, [r0, r1]        @
       
        ldr r1, = 0x1100          @CTL0 控制寄存器 0
        ldr r2, = 0x10001
        str r2, [r0, r1]   





使用特权

评论回复
18
yjmwxwx|  楼主 | 2024-7-14 22:14 | 只看该作者
本帖最后由 yjmwxwx 于 2024-7-14 23:06 编辑

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











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


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




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



opa.zip (6.68 KB)







使用特权

评论回复
19
yjmwxwx|  楼主 | 2024-7-16 20:38 | 只看该作者
驱动COG12864成功,学了十多天总算是能用了,最开始那片不知道怎么搞的不能自己复位了,幸亏买了10片
显示计数数值




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

程序
SPI_COG12864.zip (26.54 KB)

使用特权

评论回复
20
yjmwxwx|  楼主 | 2024-7-18 19:10 | 只看该作者
擦除和写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, [r0, r1]

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

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

        ldr r1, = 0x1100        @CMDEXEC
        movs r2, # 0x01
        str r2, [r0, r1]        @执行
        bkpt # 3
       
__xie_flash_chegn_xu:        @写FLASH
        ldr r1, = 0x1104        @CMDTYPE
        movs r2, # 0x01                @写
        str r2, [r0, r1]

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

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

        ldr r1, = 0x1124        @CMDBYTEN
        ldr r2, = 0XFFFF        @要写入的字节位置
        str r2, [r0, r1]       
       
        ldr r1, = 0x11d4        @STATCMD
        movs r2, # 0
        str r2, [r0, r1]        @解除写保护
       
       
        ldr r1, = 0x1100        @CMDEXEC
        movs r2, # 0x01
        str r2, [r0, r1]        @执行

        bkpt # 2





使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

117

主题

2729

帖子

48

粉丝