有一般收發、中斷方式、DMA方式:
rt_device_t rt_device_find(const char* name);
rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflags); oflags
=RT_DEVICE_FLAG_RDWR
|RT_DEVICE_FLAG_INT_RX
#define RT_DEVICE_FLAG_RDWR 0x003 /* 可讀寫模式 */ #define RT_DEVICE_FLAG_STREAM 0x040 /* 流模式 */ #define RT_DEVICE_FLAG_INT_RX 0x100 /* 中斷接收模式 */ #define RT_DEVICE_FLAG_DMA_RX 0x200 /* DMA 接收模式 */ #define RT_DEVICE_FLAG_INT_TX 0x400 /* 中斷發送模式 */ #define RT_DEVICE_FLAG_DMA_TX 0x800 /* DMA 發送模式 */
rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg);
應用舉例:
#define SAMPLE_UART_NAME "uart2" /* 串口設備名稱 */ static rt_device_t serial; /* 串口設備句柄 */ struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 配置參數 */ /* 查找串口設備 */ serial = rt_device_find(SAMPLE_UART_NAME); /* 以讀寫及中斷接收方式打開串口設備,若要修改緩沖區大小需在open前用
rt_device_control修改;其它參數可以在open后修改
*/
rt_device_open(serial, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX); config.baud_rate = BAUD_RATE_115200; config.data_bits = DATA_BITS_8; config.stop_bits = STOP_BITS_2; config.parity = PARITY_NONE; /* 打開設備后才可修改串口配置參數 */ rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);
相關讀寫:
rt_err_t rt_device_close(rt_device_t dev);
rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size);
rt_size_t rt_device_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size);
rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device_t dev,rt_size_t size));//接收完成回調
rt_err_t rt_device_set_tx_complete(rt_device_t dev, rt_err_t (*tx_done)(rt_device_t dev,void *buffer));//發送完成回調