Serial port PIC18f4620在SDCC中接收usart
我正在尝试实现PC机(linux)与用于rs232的PIC18F4620的通信。传输(PIC->至PC正常)。但是,当我试图从PC向PIC传递某些信息时,PIR1bits.RCIF标志从未设置,中断也不会发生 这是我的(PIC18f)代码(一个版本): 所以,从PIC到PC是可以的。但当我尝试时: 回显“某物”>/dev/ttyUSB0 或Serial port PIC18f4620在SDCC中接收usart,serial-port,pic18,sdcc,usart,Serial Port,Pic18,Sdcc,Usart,我正在尝试实现PC机(linux)与用于rs232的PIC18F4620的通信。传输(PIC->至PC正常)。但是,当我试图从PC向PIC传递某些信息时,PIR1bits.RCIF标志从未设置,中断也不会发生 这是我的(PIC18f)代码(一个版本): 所以,从PIC到PC是可以的。但当我尝试时: 回显“某物”>/dev/ttyUSB0 或 或者,即使我编写代码以文件形式打开/dev/ttyUSB0并进行写入,使用python串行模块,也不会发生任何事情。我已经锁定了SDCC usart实现,看
或者,即使我编写代码以文件形式打开/dev/ttyUSB0并进行写入,使用python串行模块,也不会发生任何事情。我已经锁定了SDCC usart实现,看起来不错。然而,我注意到最近有些事情发生了变化。(). 所以可能SDCC usart有错误,我自己决定实现。因此,我更改了usart代码:
usart_open(
USART_TX_INT_OFF & //0x7f
USART_RX_INT_ON & //0xff
USART_BRGH_HIGH & //0xff
USART_EIGHT_BIT & // 0xfd
USART_ASYNCH_MODE, //0xfe
129 // 9600 at 20MHz
);
通过我的特定代码(8位,带中断的接收,无奇偶校验):
一切都很好。stty命令可用于配置许多与设备通信相关的内容。例如,将波特率设置为9600并禁用echo
stty -echo -F /dev/ttyUSB0 9600
显示所有配置
stty -a -F /dev/ttyUSB0
usart_open(
USART_TX_INT_OFF & //0x7f
USART_RX_INT_ON & //0xff
USART_BRGH_HIGH & //0xff
USART_EIGHT_BIT & // 0xfd
USART_ASYNCH_MODE, //0xfe
129 // 9600 at 20MHz
);
// Serial Interrupts
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;
PIE1bits.RCIE = 1;
IPR1bits.RCIP = 0;
PIE1bits.TXIE = 0;
IPR1bits.TXIP = 0;
TRISCbits.TRISC7 = 1; //RX (1:input)
TRISCbits.TRISC6 = 1; //TX (0:output)
//~ TXSTAbits.CSRC = 0; //Don't care
TXSTAbits.TX9 = 0;
TXSTAbits.TXEN = 1;
TXSTAbits.SYNC = 0;
TXSTAbits.SENDB = 0;
TXSTAbits.BRGH = 1;
//~ TXSTAbits.TRMT //Read Only
TXSTAbits.TX9D = 0;
RCSTAbits.SPEN = 1;
RCSTAbits.RX9 = 0;
//~ RCSTAbits.SREN = 0; //Don't care
RCSTAbits.CREN = 1;
//~ RCSTAbits.ADDEN = 0; //Don't care
//~ RCSTAbits.FERR //Read Only
//~ RCSTAbits.OERR //Read Only
//~ RCSTAbits.RX9D //Read Only
//~ BAUDCONbits.ABDOVF //Read
//~ BAUDCONbits.RCIDL //Read Only
BAUDCONbits.RXDTP = 0;
BAUDCONbits.TXCKP = 0;
BAUDCONbits.BRG16 = 0;
//~ Not implemented
BAUDCONbits.WUE = 0;
BAUDCONbits.ABDEN = 0;
SPBRG = 129;
stdout = STREAM_USART;
stty -echo -F /dev/ttyUSB0 9600
stty -a -F /dev/ttyUSB0