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.

关于TI's capacitive touch software library

const struct Element Right = {

             .inputPxselRegister = (uint8_t *)&P1SEL,  

             .inputPxsel2Register = (uint8_t *)&P1SEL2,

}

不明白 (uint8_t *)&P1SEL 什么意思,&P1SEL取了P1SEL的地址,然后呢,怎么又定义了一个指针,这个指针到底是谁?

  • camus,

    您好!

    (uint8_t *)&P1SEL是P1SEL地址格式化,P1SEL是对应的寄存器,在头文件中定义如下:

    #define P1SEL_              0x0026 /* P1 功能选择寄存器*/

    sfrb    P1SEL            = P1SEL_;

    就是将0x0026传给 .inputPxselRegister。

    关于sfrb的说明如下:

    外围模块变量Sfrb、Sfrw也称作特殊功能寄存器变量,直接位于内部RAM单元。

       Sfrb范围为:0X00---0XFF;

       Sfrw范围为:0X100---0X1FF;

       外围模块变量使符号名与此范围的字节或字相联系,该地址处寄存器可以符号化被寻址,但没有分配存储空间。

    例如:

    Sfrb P1IES = 0X24H;   字节是8位

    Sfrb P1DIR = 0X22H;

    Sfrw ADC12CTL1 = 0X01A2H   字是16位

    经过定义后就可以直接通过对应的符号访问这些寄存器了。

    PIDIR = 0X01;P1.0输出

    希望对您有所帮助。

  • 那&P1SEL是不是P1SEL对应的寄存器的地址,即0x0026 。那么.inputPxselRegister = &P1SEL, 就把地址传给 .inputPxselRegister .干嘛 有(uint8_t *)?

  • Camus,

    您好!

    强制类型转换。对应的是byte的操作。

  • 同意鸵鸟蝈蝈的说法。就相当于把Pin口的地址赋予通用型方式,主要是保证整个library的通用性。另外,我觉得也是减小代码空间的考虑。

    inputPxselRegister的定义如下:

    uint8_t *inputPxselRegister;    // PinOsc: port selection address

    uint8_t *inputPxsel2Register;   // PinOsc: port selection 2 address  

    那么就需要强制转换P1SEL,减小一个byte空间。如果有多个按键,那么就能节省一部分空间。

x 出现错误。请重试或与管理员联系。