久久精品国产精品国产一区,少妇扒开毛毛自慰喷水,国产精品无码电影在线观看 ,久久天天躁夜夜躁狠狠85麻豆

思澈科技軟件開發(fā)工具包  2.20
UART

UART驅(qū)動(dòng)包括兩層:硬件訪問層(HAL)和RT-Thread的適配層。
硬件訪問層提供用于訪問 UART 外設(shè)寄存器的基本 API。 有關(guān)詳細(xì)信息,請參閱 UART HAL 的 API 文檔。
適配層提供對 RT-Thread 驅(qū)動(dòng)框架的支持。 用戶可以使用 RT-Thread POSIX 驅(qū)動(dòng)程序接口進(jìn)行 UART 編程。 請參閱 RT-Thread 驅(qū)動(dòng)程序的 API 文檔。
主要功能包括:

  • 多實(shí)例支持
  • 支持UART波特率高達(dá)3Mbps
  • 支持偶/奇/無奇偶校驗(yàn),5/6/7/8/位數(shù),1/2停止位
    如果奇偶校驗(yàn)為奇偶校驗(yàn),位數(shù)為8,芯片組需要設(shè)置為9 位,即使用第9 位作為奇偶校驗(yàn)
  • 支持基于中斷的 RX 和 TX
  • RX 和 TX 均支持 DMA

驅(qū)動(dòng)配置

UART 驅(qū)動(dòng)程序可以使用 UART 外設(shè)的多個(gè)實(shí)例。 可以使用 menuconfig 工具為每個(gè)項(xiàng)目選擇外設(shè)和 DMA 支持配置的實(shí)例,通常保存在 C 頭文件中。 默認(rèn)情況下,配置保存為 rtconfig.h。

以下示例顯示了在一個(gè)項(xiàng)目頭文件中定義的標(biāo)志,該項(xiàng)目正在使用具有 RX DMA 支持的 uart1 和 uart2 實(shí)例:

#define BSP_USING_UART
#define BSP_USING_UART1
#define BSP_UART1_RX_USING_DMA
#define BSP_USING_UART2
#define BSP_UART2_RX_USING_DMA

配置完成后,用戶需要在所有需要訪問驅(qū)動(dòng)程序的源代碼中包含頭文件。

使用UART驅(qū)動(dòng)

適配器層注冊 RT-Thread 請求的硬件支持功能,并使用 HAL 實(shí)現(xiàn)這些功能。 UART HAL 公開的API 詳見 UART 。 對于使用 RT-Thread 的用戶,可以使用以下代碼作為示例:

// Find and open device
rt_device_t uart_dev = rt_device_find("uart1");
rt_err_t err = rt_device_open(uart_dev, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_DMA_RX);
// Configure UART
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
config.baudrate=115200;
rt_device_control(uart_dev, RT_DEVICE_CTRL_CONFIG, &config);
// TX
uint8_t data=[1,2,3,4,5,6,7,8];
rt_device_write(uart_dev,
-1, // Start offset, for UART, this is ignored.
data,
sizeof(data));
// RX
#define BLOCK_SIZE 256
uint8_t g_rx_data=[BLOCK_SIZE];
static rt_sem_t rx_sem;
// Interrupt callback, try not issue read in interrupt context.
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
rt_sem_release(rx_sem);
return RT_EOK;
}
...
// Create semphore to communicate with IRQ context
rt_sem_create("uart_sem", 1, RT_IPC_FLAG_FIFO);
// Set RX indication functions
rt_device_set_rx_indicate(uart_dev, uart_input);
// Wait fo RX interrupt.
rt_sem_take(rx_sem, 1000);
// Read up to BLOCK_SIZE, will return len actually read.
int len=rt_device_read(uart_dev,
-1,
g_rx_data,
BLOCK_SIZE);
Note
DMA 支持是通過 menuconfig 工具配置的,要使用 DMA,開發(fā)者需要在打開設(shè)備時(shí)設(shè)置相應(yīng)的標(biāo)志。
len
uint16_t len
Definition: bf0_ble_ancs.h:226
data
uint8_t data[]
Definition: bf0_ble_ancs.h:227