EasyARM-iMX283 使能6个串口

6个串口,说多不是很多,说少也不是很少,就目前来说,本身iMX283支持的6个串口中,一个用于调试,已经焊接在底板上,还有另外5个,排序分辨是UART0,UART1,UART2,UART3,UART4.其中UART2,UART3和SPI复用,其他三个专业用于UART.专用的UART0,UART1又可以变成485串口.看内核配置,选项都已经全部打开[查找:CONFIG_MXS_AUART0_DEVICE_ENABLE]:

QQ截图20150521140328

如果要开启UART0,UART1流控,需要去掉注释[arch/arm/mach-mx28/mx28evk_pins.c]:

        {
         .name  = "RS485_DIR",
         .id    = PINID_LCD_D17,
         .fun   = PIN_GPIO,
         .strength = PAD_8MA,
         .voltage       = PAD_3_3V,
         .drive = 1,
         },
        {
         .name  = "RS485_DIR",
         .id    = PINID_LCD_D18,
         .fun   = PIN_GPIO,
         .strength = PAD_8MA,
         .voltage       = PAD_3_3V,
         .drive = 1,
         },

当然只是使能外设,要用就要到arch/arm/mach-mx28/mx28_pins.h修改,原文:

        {
         .name = "AUART4.RX",
         .id = PINID_SAIF0_BITCLK,
         .fun           = PIN_FUN3,
         },
        {
         .name = "AUART4.TX",
         .id = PINID_SAIF0_SDATA0,
         .fun           = PIN_FUN3,
         },

把PIN_FUN3改成PIN_FUN2就可以了,SPI也同理修改.然后/dev/ttySP*是设备文件节点,但是,设备文件节点又不能直接使用的,需要IOCTL.首先打开设备.C语言代码如下:

int fd;
fd = open("/dev/ttySP0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd < 0) {
    printf("open device error
");
}

的输出用write,读取用read,关闭设备用close,默认是阻塞方式,用
fcntl(fd, F_SETFL, FNDELAY)设置成非阻塞.详细修改就是另一回事了,包括波特率,校验位.

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注