OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3456|回复: 2

裸机程序开发,协处理器寄存器TTBCR操作不正常

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2020-3-10
在线时间
1 小时
发表于 2022-6-26 15:26:48 | 显示全部楼层 |阅读模式
1金钱
我自己写了个LED的闪烁程序作为基础,初始化了串口,然后准备初始化MMU时,发现TTBCR寄存器无法正常访问。如果我直接读取TTBCR寄存器的话值为0x0;
如果往里面写0xffffffff的话,读出来为0x37;
如果往里面写0x22的话,读出来为0x22;
从未遇到过这种问题,请大神们帮忙指明方向,感激不敬!

启动代码如下
_start:
        dsb
        isb

        //disable watch dog
        ldr        r0, =0x10060000
        mov        r1, #0
        str        r1, [r0]
        bl ledUartInit

        //set stack
        ldr        sp, =0x02050000
        bl        led_blink


led_blink函数原型如下

void led_blink()
{
        u8 uart_num_default = 2;

        GPL2CON = 0x00000001;
        GPK1CON = 0x00000010;

        uart_putcs(uart_num_default,"--hello world!--\r\n");
        mmuInit();
        uart_putcs(uart_num_default,"--mmuInit End!--\r\n");
        while(1)                                                      
        {}
}

mmuInit 原型如下
T_VOID mmuInit(T_VOID)
{
        u32 v = read_cpsr();

        uart_putcs(2,"\r\ncpsr: ");
        uart_put32Hex(v);
        uart_putcs(2,"\r\n");
        mmuDisable();

        mmuSetTTBCR();
        __asm__ __volatile__("dsb");
        __asm__ __volatile__("isb");

}


mmuSetTTBCR 原型如下
T_VOID mmuSetTTBCR(T_VOID)
{
        u32 v = 0, ttbcr = 0;

        v = read_ttbcr();
        __asm__ __volatile__("dsb");
        __asm__ __volatile__("isb");
        uart_putcs(2,"\r\nttbcr: ");
        uart_put32Hex(v);
        uart_putcs(2,"\r\n");

        ttbcr = 0x25C22580;
       write_ttbcr(ttbcr);

        v = read_ttbcr();
        __asm__ __volatile__("dsb");
        __asm__ __volatile__("isb");
        uart_putcs(2,"\r\nttbcr: ");
        uart_put32Hex(v);
        uart_putcs(2,"\r\n");
}


write_ttbcr
        0x4000089C:    SUB      sp,sp,#4
        0x400008A0:    STR      r0,[sp,#0]
        0x400008A4:    LDR      r0,[sp,#0]
        0x400008A8:    MCR      p15,0,r0,c2,c0,2
        0x400008BC:    ADD      sp,sp,#4
        0x400008C0:    BX       lr

read_ttbcr
        0x40000420:    SUB      sp,sp,#4
        0x40000424:    MRC      p15,0,r0,c2,c0,2
        0x40000428:    STR      r0,[sp,#0]
        0x4000042C:    LDR      r0,[sp,#0]
        0x40000430:    ADD      sp,sp,#4
        0x40000434:    BX       lr

程序如上,还请各位大神帮忙排查下问题,各种资料都查了,实在找不到问题了。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1960
金钱
1960
注册时间
2021-4-16
在线时间
500 小时
发表于 2022-6-27 10:05:19 | 显示全部楼层
回复

使用道具 举报

3

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2021-12-22
在线时间
34 小时
发表于 2022-6-29 14:55:20 | 显示全部楼层
看下TTBCR寄存器的数据手册是如何介绍的,可能有一些位保留了,暂时未清楚这个寄存器是干嘛的
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 10:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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