读写寄存器失败!请教

九个太阳2023 2010-01-28 10:51:02
代码如下:

static OMAP3430_MCBSP_REGS_t *pMcbsp1Regs;

pMcbsp1Regs = OALPAtoUA(OMAP_MCBSP1_REGS_PA);

RETAILMSG(1,(TEXT("<>InitMcbsp1_32bit:pMcbsp1Regs = 0x%x\r\n"),pMcbsp1Regs));
RETAILMSG(1,(TEXT("<>InitMcbsp1_32bit:(&pMcbsp1Regs->SYSCONFIG) = 0x%x\r\n"),(&pMcbsp1Regs->SYSCONFIG)));

nRegValue = INREG32(&pMcbsp1Regs->SYSCONFIG);
RETAILMSG(1,(TEXT("<>InitMcbsp1_32bit:*(&pMcbsp1Regs->SYSCONFIG) = 0x%x\r\n"),*(&pMcbsp1Regs->SYSCONFIG)));

OUTREG32(&pMcbsp1Regs->SYSCONFIG,(1<<1));
RETAILMSG(1,(TEXT("<>InitMcbsp1_32bit:Set Reg end!\r\n")));

每次运行的时候,代码就死在nRegValue = INREG32(&pMcbsp1Regs->SYSCONFIG);这一句!
但是从串口信息可以看出寄存器的地址都是对的,但是为什么不能读或者写呢????
请教高手
...全文
556 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
GaryLiu1104 2010-01-28
  • 打赏
  • 举报
回复
与总线接口的配置有关系,用INREG32,需要把总线配置成32位的,以前我们就遇到过这个问题,总线配置16位的,用32位函数去操作总是不对。
九个太阳2023 2010-01-28
  • 打赏
  • 举报
回复
呵呵,每次发帖Veabol都来帮我,在这里先谢谢了。

#define INREG32(x) READ_REGISTER_ULONG((ULONG*)(x))
#define OUTREG32(x, y) WRITE_REGISTER_ULONG((ULONG*)(x), (ULONG)(y))

这是我的串口信息:
+InitMcbsp1_32bit
<>InitMcbsp1_32bit:pMcbsp1Regs = 0x48074000
<>InitMcbsp1_32bit:(&pMcbsp1Regs->SYSCONFIG) = 0x4807408c
博说医械研发 2010-01-28
  • 打赏
  • 举报
回复
INREG32的参数是什么?UINT32形式还是指针?pMcbsp1Regs->SYSCONFIG就相当于一个寄存器了,为什么前边还要加个取地址的符号?
九个太阳2023 2010-01-28
  • 打赏
  • 举报
回复
已解决,原因是没有使能fclk和iclk,呵呵,结贴给分!

19,503

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧