forked from M-Labs/zynq-rs
1
0
Fork 0

enable_uart0(): add srcsel

This commit is contained in:
Astro 2019-05-07 00:01:43 +02:00
parent 55957eea09
commit fdc6c38de6
2 changed files with 13 additions and 6 deletions

View File

@ -2,10 +2,17 @@ use volatile_register::{RO, WO, RW};
use crate::{register, register_bit, register_bits, regs::Register}; use crate::{register, register_bit, register_bits, regs::Register};
pub enum PllSource {
IoPll = 0b00,
ArmPll = 0b10,
DdrPll = 0b11,
}
register!(uart_clk_ctrl, UartClkCtrl, u32); register!(uart_clk_ctrl, UartClkCtrl, u32);
register_bit!(uart_clk_ctrl, clkact0, 0); register_bit!(uart_clk_ctrl, clkact0, 0);
register_bit!(uart_clk_ctrl, clkact1, 1); register_bit!(uart_clk_ctrl, clkact1, 1);
register_bits!(uart_clk_ctrl, divisor, u8, 8, 13); register_bits!(uart_clk_ctrl, divisor, u8, 8, 13);
register_bits!(uart_clk_ctrl, srcsel, u8, 4, 5);
impl UartClkCtrl { impl UartClkCtrl {
const ADDR: *mut Self = 0xF8000154 as *mut _; const ADDR: *mut Self = 0xF8000154 as *mut _;
@ -15,8 +22,12 @@ impl UartClkCtrl {
pub fn enable_uart0(&self) { pub fn enable_uart0(&self) {
self.modify(|_, w| { self.modify(|_, w| {
w.clkact0(true) // a. Clock divisor, slcr.UART_CLK_CTRL[DIVISOR] = 0x14.
.divisor(0x14) // b. Select the IO PLL, slcr.UART_CLK_CTRL[SRCSEL] = 0.
// c. Enable the UART 0 Reference clock, slcr.UART_CLK_CTRL [CLKACT0] = 1.
w.divisor(0x14)
.srcsel(PllSource::IoPll as u8)
.clkact0(true)
}) })
} }
} }

View File

@ -11,10 +11,6 @@ impl Uart {
uart_rst_ctrl.reset_uart0(); uart_rst_ctrl.reset_uart0();
// TODO: Route UART 0 RxD/TxD Signals to MIO Pins // TODO: Route UART 0 RxD/TxD Signals to MIO Pins
// a. Clock divisor, slcr.UART_CLK_CTRL[DIVISOR] = 0x14.
// b. Select the IO PLL, slcr.UART_CLK_CTRL[SRCSEL] = 0.
// c. Enable the UART 0 Reference clock, slcr.UART_CLK_CTRL [CLKACT0] = 1.
// d. Disable UART 1 Reference clock, slcr.UART_CLK_CTRL [CLKACT1] bit = 0.
let uart_clk_ctrl = super::slcr::UartClkCtrl::new(); let uart_clk_ctrl = super::slcr::UartClkCtrl::new();
uart_clk_ctrl.enable_uart0(); uart_clk_ctrl.enable_uart0();