pswarfound 发表于 2011-12-21 17:26:15

485通信问题

移植到LPC2378上,UART0接的RS485和上位机通信,P0.6是收发转换控制引脚
#define U0PINS0x50
在board.c中,修改引脚
void rt_hw_console_init()
{
        /* Enable RxD and TxD pins */
        PINSEL0 |= U0PINS;          

        /* 8 bits, no Parity, 1 Stop bit */
        U0LCR = 0x83;               
        FIO0DIR |= RS485_CON;                                        //P0.6为输出
        FIO0CLR |= RS485_CON;                                        //接收状态

        /* Setup Baudrate */
        U0DLL = (PCLK/16/BAUD_RATE) & 0xFF;
        U0DLM = ((PCLK/16/BAUD_RATE) >> 8) & 0xFF;

        /* DLAB = 0 */
        U0LCR = 0x03;
}
然后是输出函数
void rt_hw_console_output(const char* str)
{
        FIO0SET |= RS485_CON;                                        // 发送状态

        while (*str)
        {
                if (*str=='\n')
                {
                        while (!(U0LSR & 0x20));
                        U0THR = '\r';
                }
       
                while (!(U0LSR & 0x20));
                U0THR = *str;
               
                str ++;
        }
        FIO0CLR |= RS485_CON;                                        // 接收状态          
}
在serial.c中的 rt_hw_serial_init(void)函数中也添加
        PINSEL0 = 0x50;
        FIO0DIR|=(0x01<<6);
        FIO0CLR|=(0x01<<6);//默认为接收状态

在rt_serial_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size)中的发送循环前后添加
if((dev->parent.name)=="uart1")
{
        FIO0SET|=(0x01<<6);
}



if((dev->parent.name)=="uart1")
{
        FIO0SET|=(0x01<<6);
}

下载到板上启动,logo接收正常,"finsh<<"也显示出来了,但是输入字符没反应,是超级终端配置有问题还是rtt的中断接收有地方需要改动?
看各位已经网络、模拟器啥啥的都跑上了,也想赶快跟上大家的步伐,有点心急
能否提点一二
页: [1]
查看完整版本: 485通信问题