新手上路
- 积分
- 35
- 金钱
- 35
- 注册时间
- 2019-8-26
- 在线时间
- 9 小时
|
1金钱
在imx6ul的i2c裸机开发中的我对以下代码有点疑惑:#define IOMUXC_UART4_TX_DATA_I2C1_SCL 0x020E00B4U, 0x2U, 0x020E05A4U, 0x1U, 0x020E0340U
#define IOMUXC_UART4_RX_DATA_I2C1_SDA 0x020E00B8U, 0x2U, 0x020E05A8U, 0x2U, 0x020E0344U
IOMUXC_SetPinMux(IOMUXC_UART4_TX_DATA_I2C1_SCL,1);
IOMUXC_SetPinMux(IOMUXC_UART4_RX_DATA_I2C1_SDA,1);
static inline void IOMUXC_SetPinMux(uint32_t muxRegister, uint32_t muxMode, uint32_t inputRegister, uint32_t inputDaisy,uint32_t configRegister,uint32_t inputOnfield)
{
*((volatile uint32_t *)muxRegister) =IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(muxMode) | IOMUXC_SW_MUX_CTL_PAD_SION(inputOnfield);
if (inputRegister)
{
*((volatile uint32_t *)inputRegister) = IOMUXC_SELECT_INPUT_DAISY(inputDaisy);
}
}
上面对UART4_TX和UART4_RX复用为i2c管脚我查看代码发现 IOMUXC_SetPinMux(IOMUXC_UART4_TX_DATA_I2C1_SCL,1); 的效果是将SW_MUX_CTL_PAD_UART4_TX_DATA SW MUX Control Register(IOMUXC_SW_MUX_CTL_PAD_UART4_TX_DATA) 的bit4—bit0置为10000, 查看参考手册这样只是强制复用成UART4_TX_DATA,这里我真的看不大懂。。。。。
|
最佳答案
查看完整内容[请看2#楼]
你理解的是错的!0X020E00B4是复用寄存器,后面的0x2就是设置MUX_MODE为0X2,也就是设置为I2C1_SCL。不知道你看的bit4-bit0 10000是哪里来的.
|