This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
我对 CCS 和嵌入式系统非常陌生。 我 正在尝试引导我了解控制套件中的示例
在以下有关 GPIO 设置的示例中-
我无法完全理解 IF 运算符中使用的条件。 您能不能帮助我、或者如果不能引导我找到一些合适的资源、我可以在这些资源中了解这个主题。
一
gpioBaseAddr =(uint32 *) GpioCtrlRegs;
对于(regOffset = 0;regOffset < sizeof (GpioCtrlRegs)/2;regOffset++)
{
//
//Hack、以避免在所有引脚上启用上拉。 GPyPUD 偏移量
//0x0C 位于每个0x40字的寄存器组中。 因为这是 A
//32位指针、地址必须除以2。
//
if (regOffset %(0x40/2)!=(0x0C/2))
{
gpioBaseAddr[regOffset]= 0x00000000;
}
}
该循环旨在清除除 GPyPUD 之外的所有 GpioCtrlRegs、以便 if 语句可确保跳过 GPyPUD 寄存器。
gpioBaseAddr 将 GpioCtrlRegs 设置为像32位元素数组一样访问、其中 regOffset 用于索引这些元素。 器件上的实际寄存器地址偏移量是以16位字为单位的、这就是我们在计算中将0x40和0x0C 除以2的原因。 (regOffset %(0x40/2))部分使用 regOffset 来计算相对于电流寄存器组(A、B、C 等)开始的偏移。 (0x0C/2)部分是每个组内 GPyPUD 寄存器的偏移量。
在技术参考手册中查找 GPIO 寄存器、以更好地了解寄存器的排列方式。
惠特尼
SIZE (GpioCtrlRegs)/2是 GpioCtrlRegs 存储器区域中32位寄存器的总数。 它应该是6 (组数)* 0x20 ( 专用于每个端口的32位寄存器的数量)。
惠特尼