本帖最后由 HucHenHao丶 于 2020-6-4 14:47 编辑
已经有汇编程序,但是在实习需要用C语言来完成一个器件的驱动,现在被卡在了串口2的使能阶段,现在贴串口2初试化代码
void Usart2Init(void){
//GIE=0;
asm(" MOVLW 0x55 ");
asm(" MOVWF EECON2, 0 ");
asm(" MOVLW 0xAA ");
asm(" MOVWF EECON2, 0 ");
PPSCONbits.IOLOCK=0;
RPINR16=0X10//RP16为输入脚
RPOR15=0x05;
asm(" MOVLW 0x55 ");
asm(" MOVWF EECON2, 0 ");
asm(" MOVLW 0xAA ");
asm(" MOVWF EECON2, 0 ");
PPSCONbits.IOLOCK=1;
ODCON2bits.U2OD=0;
TRISC5=1;
TRISC4=0;
TXSTA2=0x24;//发送配置寄存器
RCSTA2=0x90;//接收配置寄存器
BAUDCON2bits.BRG16=0;
SPBRG2=0x1F;//波特率寄存器,设置波特率为9600
PIE3bits.RC2IE=1;
RCONbits.IPEN=1;
INTCONbits.GIE=1;
}
现在怀疑就是PPS这一步出现了问题,因为手册里说要
在正常工作时,不允许写入RPINRx和RPORx寄存器。
尝试写入操作看似正常执行,但实际上寄存器的内容保
持不变。要更改这些寄存器,必须用硬件进行解锁。寄
存器锁定由 IOLOCK 位 (PPSCON<0>)控制。将
IOLOCK 置 1 可防止对控制寄存器的写操作;将
IOLOCK 清零则允许写操作。
要置 1 或清零 IOLOCK,必须执行特定的命令序列:
1. 将 55h 写入 EECON2<7:0>。
2. 将 AAh 写入 EECON2<7:0>。
3. 执行对 IOLOCK 清零 (或置 1)的单次操作。
IOLOCK 会保持一种状态直到被更改。这允许对所有的
PPS 寄存器这样进行配置:在对所有控制寄存器的更新
后紧跟一个解锁序列,然后用第二个锁定序列锁定。
然而又只能用行内汇编来写,实属无能为力,希望各位大佬能支支招
|