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}