hal/
serial.rs

1
2#[path = "fe310/gpio.rs"] mod gpio;
3#[path = "fe310/uart.rs"] mod uart;
4
5pub type UartBaud = u32;
6pub type UartInstance = u8;
7
8pub enum SerialDeviceType {
9    Uart,
10    Spi,
11    I2c,
12}
13
14pub enum UartBitCount {
15    One,
16    Two,
17}
18
19pub enum UartFifoDepth {
20    Min,
21    Max,
22}
23
24pub struct UartConfig {
25    pub baud: UartBaud,
26    pub start_bits: UartBitCount,
27    pub stop_bits: UartBitCount,
28    pub fifo: UartFifoDepth,
29}
30
31pub struct Uart {
32    pub instance: UartInstance,
33    pub config: UartConfig,
34}
35
36pub trait Configure {
37    fn configure(&self) {}
38}
39
40pub trait EnableTx {
41    fn enable_tx(&self) {}
42}
43
44pub trait DisableTx {
45    fn disable_tx (&self) {}
46}
47
48pub trait DoSendByte {
49    fn do_send_byte(&self, b: u8) {}
50}
51
52impl Configure for Uart {
53    fn configure(&self){
54        uart::uart_set_baud_divisor((*self).instance, 138);
55        uart::uart_set_stopbits ( (*self).instance, 1);
56        uart::uart_set_tx_fifo_depth( (*self).instance, 7);
57    }
58}
59
60
61impl DoSendByte for Uart {
62    fn do_send_byte(&self, b: u8){
63        uart::uart_do_send_byte ( (*self).instance, b);
64    }
65}
66
67impl EnableTx for Uart {
68    fn enable_tx (&self){
69        uart::uart_enable_tx ( (*self).instance);
70    }
71}
72
73impl DisableTx for Uart {
74    fn disable_tx (&self){
75        uart::uart_disable_tx ( (*self).instance);
76    }
77}