PIC32-IO寄存器及CN中断的设置

学习一下PIC32的IO寄存器

I/O寄存器

寄存器

  • TRISx

    TRIS(tristate):数据方向寄存器,决定引脚是输入还是输出,如果数据方向位为1,则引脚为输入引脚,反之则为输出引脚,复位后所有端口引脚被定义为输入引脚

  • LATx

    LAT(latch): 输出锁存器,锁存端口输出的值,读LAT读到的是锁存器中的值,写LAT写锁存器的值

  • PORTx

    PORT(port):端口寄存器,读PORT读到的是端口电平的值(与LAT做区分),写PORT写的是LAT锁存器的值

  • ODCx

    ODC(open drain control):漏极开路控制寄存器,配置端口为数字输出漏极开路输出,为1时配置为漏极开路输出

  • ANSELx

    ANSEL(analog select):模拟端口控制寄存器

    • 设置为模拟输入引脚必须将其对应ANSEL和TRIS位置1;
    • 设置为数字引脚必须清零ANSEL;
    • ANSELx默认值为0xFFFF,共用模拟功能的所有引脚默认情况下均为模拟引脚
  • CNENx

    CNEN(change notification interrupt enable):输入电平变化通知使能寄存器,置1时使能端口引脚,用于在电平状态变化时发出中断请求

  • CNSTATx

    CNSTAT(change notification status):指示字上次读取PORTx位以来对应引脚电平是否发生了变化

  • CNPUx

    CNPU(change notification pull up):上拉控制寄存器,置1时借助I/O引脚内部的弱上拉电路上拉引脚

  • CNPDx

    CNPD(change notification pull down):下拉控制寄存器,置1时借助I/O引脚内部的弱下拉电路下拉引脚。

  • CNCONx

    CNCON(change notification control):电平变化通知控制寄存器,置1时允许电平变化通知

快速原子位寄存器

  • CLR:清零寄存器
  • SET:置一寄存器
  • INV:翻转寄存器

CN中断设置

以RB7为例:

若有中断服务函数:

1
2
3
4
void __USER_ISR CN_ISR(void) {
clearIntFlag(_CHANGE_NOTICE_B_IRQ);
// put isr code
}

可设置中断如下:

1
2
3
4
5
6
7
8
CNENB = 0;
CNCONBbits.CNIEB7 = 1;
CNCONB.ON = 1;

setIntVector(_CHANGE_NOTICE_VECTOR, CN_ISR);
setIntPriority(_CHANGE_NOTICE_VECTOR, 4, 0);
clearIntFlag(_CHANGE_NOTICE_B_IRQ);
setIntEnable(_CHANGE_NOTICE_B_IRQ);

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!