| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
-
- #include "board.h"
- void PeriClk0MutEnable(uint32_t ClkBitMsk)
- {
- rt_base_t level;
- level = rt_hw_interrupt_disable();
- M0P_SYSCTRL->PERI_CLKEN0 |= ClkBitMsk;
- rt_hw_interrupt_enable(level);
- }
- uint32_t M0P_SYSCTRL_PERI_CLKEN1_BACKUP = 0;
- void PeriClk1MutEnable(uint32_t ClkBitMsk)
- {
- rt_base_t level;
- level = rt_hw_interrupt_disable();
- M0P_SYSCTRL_PERI_CLKEN1_BACKUP |= ClkBitMsk;
- M0P_SYSCTRL->PERI_CLKEN1 = M0P_SYSCTRL_PERI_CLKEN1_BACKUP;
- rt_hw_interrupt_enable(level);
- }
- void PeriClk0MutDisable(uint32_t ClkBitMsk_n)
- {
- rt_base_t level;
- level = rt_hw_interrupt_disable();
- M0P_SYSCTRL->PERI_CLKEN0 &= ClkBitMsk_n;
- rt_hw_interrupt_enable(level);
- }
- void PeriClk1MutDisable(uint32_t ClkBitMsk_n)
- {
- rt_base_t level;
- level = rt_hw_interrupt_disable();
- M0P_SYSCTRL_PERI_CLKEN1_BACKUP &= ClkBitMsk_n;
- M0P_SYSCTRL->PERI_CLKEN1 = M0P_SYSCTRL_PERI_CLKEN1_BACKUP;
- rt_hw_interrupt_enable(level);
- }
- void MutResetPeri(peri_reset_t PeriRst)
- {
- rt_base_t level;
- uint32_t PeriRstMsk;
-
- PeriRstMsk = ~(0x1u<<(PeriRst&0x1Fu));
- level = rt_hw_interrupt_disable();
- if (PeriRst<32){
- M0P_RESET->PERI_RESET0 = 0x7F7F6FFF & PeriRstMsk;
- M0P_RESET->PERI_RESET0 = 0x7F7F6FFF;
- } else {
- M0P_RESET->PERI_RESET1 = 0x00000318 & PeriRstMsk;
- M0P_RESET->PERI_RESET1 = 0x00000318;
- }
- rt_hw_interrupt_enable(level);
- }
- #define CLKTRIM_RUN_TIME 40
- void clktrim_init(void)
- {
- PeriClk_MutEnable(PeriClk_Trim);
- M0P_CLK_TRIM->CR = (0<<8) | // calclk_sel[2],
- (0<<7) | // IE, interrupt 0:off; 1:on;
- (0<<6) | // mon_en, monitor 0:off; 1:on;
- // (0<<4) | // calclk_sel[1:0], 0:RCH, 1:XTH; 2:RCL; 3:XTL; 4:PLL;
- (1<<4) | // calclk_sel[1:0], 0:RCH, 1:XTH; 2:RCL; 3:XTL; 4:PLL;
- (3<<1) | // refclk_sel[1:0], 0:RCH, 1:XTH; 2:RCL; 3:XTL;
- (0<<0); // trim_start, 0:stop; 1:start;
- M0P_CLK_TRIM->REFCON = 32768*CLKTRIM_RUN_TIME;
- M0P_CLK_TRIM->CR_f.TRIM_START = 1;
- }
- clkoffset_t clktrim_check(void)
- {
- clkoffset_t ofst;
- if (M0P_CLK_TRIM->IFR_f.STOP){
- ofst.valid = 1;
- // ofst.ppm = (1000000.0f/(4000000*CLKTRIM_RUN_TIME))*((float)M0P_CLK_TRIM->CALCNT - 4000000*CLKTRIM_RUN_TIME);
- ofst.ppm = (1000000.0f/(7372800*CLKTRIM_RUN_TIME))*((float)M0P_CLK_TRIM->CALCNT - 7372800*CLKTRIM_RUN_TIME);
- M0P_CLK_TRIM->CR_f.TRIM_START = 0;
- M0P_CLK_TRIM->CR_f.TRIM_START = 1;
- } else {
- ofst.valid = 0;
- }
- return(ofst);
- }
|