Serial port PIC18f4620在SDCC中接收usart

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实现,看

我正在尝试实现PC机(linux)与用于rs232的PIC18F4620的通信。传输(PIC->至PC正常)。但是,当我试图从PC向PIC传递某些信息时,PIR1bits.RCIF标志从未设置,中断也不会发生

这是我的(PIC18f)代码(一个版本):

所以,从PIC到PC是可以的。但当我尝试时:

回显“某物”>/dev/ttyUSB0


或者,即使我编写代码以文件形式打开/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