19781011 发表于 2012-10-19 20:04:37

请大虾帮忙看一下lpc1768库文件里面的一句C语言程序

本帖最后由 19781011 于 2012-10-19 20:08 编辑

原句如下:
*(uint32_t *)(pPinCon + pinmodereg_idx) |= ((uint32_t)modenum) << (pinnum_t * 2);
是LPC1768库文件lpc17xx_pensel.cl里面的一句,看的不是很懂,主要是这一句((uint32_t)modenum) << (pinnum_t * 2)完全看不懂,
(pinnum_t * 2)里面的pinnum_t是调用的引脚端口号,最大可以到31,再乘以2就是62,然后再让((uint32_t)modenum) 左移62位吗?
((uint32_t)modenum) 这句话的意思不是说modenum是32位的吗,怎么能左移62位呢?即使移过去了,也没有62位的寄存器可以赋值啊

hqgboy 发表于 2012-10-19 20:22:54

pinnum_t最大应该不超过16.
0~15.

hqgboy 发表于 2012-10-19 20:25:35

((uint32_t)modenum) 为了防止编译报警。
modenum不超过4.。。0~3.。。。是IO功能复用。

19781011 发表于 2012-10-19 20:34:11

感谢楼上兄弟的回答,但是在库文件里的说明指出了pinnum_t调用变量的范围是0~31,
以下是库文件说明:
uint8_t Pinnum
Pin Number, should be PINSEL_PIN_x, where x should be in range from 0 to 31
Definition at line 153 of file lpc17xx_pinsel.h.

19781011 发表于 2012-10-19 20:37:42

实际使用库文件时,pinnum超过15,程序也是可以正常运行的
页: [1]
查看完整版本: 请大虾帮忙看一下lpc1768库文件里面的一句C语言程序