gpt4 book ai didi

c - Bare Metal Arm (AM1808) - 从 Kick 寄存器读取

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:59 24 4
gpt4 key购买 nike

我正在尝试在我的裸机 AM1808 上进行一些引脚多路复用,但我似乎无法写入踢脚寄存器?或者,更具体地说,我似乎无法读回我尝试写入的值。

这是我的代码:

#define SYSCFG_BASE ((void*volatile)0x01C14000)
#define SYSCFG_KICK0R (*((unsigned int*volatile)(SYSCFG_BASE + 0x38)))
#define SYSCFG_KICK1R (*((unsigned int*volatile)(SYSCFG_BASE + 0x3C)))

#define KICK0_UNLOCK 0x83E70B13
#define KICK1_UNLOCK 0x95A4F10
#define KICK0_LOCK 0x0
#define KICK1_LOCK 0x0

static void
gpio_init (int diode)
{
int status = 0;
asm volatile (
"mrs %[ps],cpsr" : [ps]"=&r"(status)
);
printf("mode: 0x%x\n", status & 0x1F);

printf("kick0: 0x%x", SYSCFG_KICK0R);
SYSCFG_KICK0R = KICK0_UNLOCK;
printf(" -> 0x%x\n", SYSCFG_KICK0R);

printf("kick1: 0x%x", SYSCFG_KICK1R);
SYSCFG_KICK1R = KICK1_UNLOCK;
printf(" -> 0x%x\n", SYSCFG_KICK1R);

/* pinmux stuff */

SYSCFG_KICK0R = KICK0_LOCK;
SYSCFG_KICK1R = KICK1_LOCK;
}

哪些输出:

mode:  0x13
kick0: 0x0 -> 0x0
kick1: 0x0 -> 0x0

虽然我处于管理员模式,但我通常无法读取踢球寄存器吗?如果是这样,我如何测试我是否正确解锁了 syscfg?

更新:事实证明,我遇到的问题与引脚多路复用或踢脚寄存器无关,而是我在使用正确多路复用的 GPIO 引脚的顶层逻辑中遇到错误。抱歉造成混淆。

最佳答案

根据数据表,您的 KICK1 值应该是 0x95A4F1E0,您的代码有 0x95A4F10 不匹配。从代码中可以明显看出第二个值比第一个值短,这是一个警告信号。

它还说,正如评论中所指出的那样,硬件的 Rev 2 不再具有踢脚寄存器,因此也请检查一下。

另外,确保在可怕的戳戳序列中调用 printf() 是安全的。

关于c - Bare Metal Arm (AM1808) - 从 Kick 寄存器读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20606484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com