S32K144點燈,通過RTC秒中斷進行閃爍並支持RTT打印,S32 Designed stdio 和MDK5分別實現

這段時間一直在學習這個S32K144的開發、學習瞭解了S32 Designed stdio(S32DS)和MDK構建項目的兩種方法。

有幸在GIT網站上搜索到了一篇關於MDK的S32點燈的文件,綜合學習。

這兩段程序都支持藍宙的開發板,一直想着等我解決了這些基本的問題一定要分享出來。

整理一些遇到的小問題,其實這些東西都可以在HELP幫助文檔中查找。

1,關於S32 DS怎樣打開已有新項目

2,關於S32 DS如何調整背景色和字體大小

    S32K144的RTC使用的時鐘源是LPO,因爲它的開發板藍宙上不支持RTC外部晶振,因此我們和demo一樣選擇LPO

以下是關於RTC時鐘的配置,並開啓秒中斷和RTC報警中斷

/*******************************************************************************
Function: init_rtc
Notes   : ³õʼ»¯ RTC £¬utc_time: µ±Ç° UTC ʱ¼ä
                : 32kHz RTC clock derived from 128kHz internal LPO
*******************************************************************************/
void init_rtc(int utc_time)
{
        SIM->LPOCLKS = SIM_LPOCLKS_RTCCLKSEL(1) | SIM_LPOCLKS_LPO32KCLKEN(1)|     SIM_LPOCLKS_LPO1KCLKEN(1);

        SEGGER_RTT_printf( 0, "init_rtc SIM->LPOCLKS:0x%x.\r\n", SIM->LPOCLKS );


    PCC->PCCn[PCC_RTC_INDEX] = PCC_PCCn_CGC_MASK;       // Enable clock to RTC module - BUS_CLK
    
      RTC->SR = RTC_SR_TCE(0); 
     RTC->SR =0x00000000;
        
        

    RTC->TAR = 25;    // Alarm in 3s

    RTC->IER = RTC_IER_TAIE(1);  
 

        SEGGER_RTT_printf( 0, "init_rtc RTC->IER:0x%x.\r\n", RTC->IER );
        
    RTC->TSR = utc_time;

        SEGGER_RTT_printf( 0, "init_rtc RTC->TSR:0x%x.\r\n", RTC->TSR );

    
    RTC->CR = RTC_CR_CPE(1) | RTC_CR_LPOS(1);
        RTC->CR =0x00000004;
 

        SEGGER_RTT_printf( 0, "init_rtc RTC->CR:0x%x.\r\n", RTC->CR );
    

        RTC->IER = 0x00000014;   ////TSIE     TAIE£¨TAF¶¨Ê±Æ÷±¨¾¯Ê¹ÄÜ£©   
    RTC->SR = RTC_SR_TCE(1);       //RTC_SR_TAF Ö»¶Á¼Ä´æÆ÷
 

}

下面代碼是爲這兩個中斷配置和使能中斷優先級

static void IRQ_Config(void)
{
    NVIC->ICPR[1] = 1 << (RTC_IRQn % 32);  /* clr any pending IRQ*/
    NVIC->ISER[1] = 1 << (RTC_IRQn % 32);  /* enable IRQ */
    NVIC->IP[RTC_IRQn] = 0x8;              /* priority 10 of 0-15*/

    NVIC->ICPR[1] = 1 << (RTC_Seconds_IRQn % 32);  /* clr any pending IRQ*/
    NVIC->ISER[1] = 1 << (RTC_Seconds_IRQn % 32);  /* enable IRQ */
    NVIC->IP[RTC_Seconds_IRQn] = 0x9;              /* priority 10 of 0-15*/
}

系統時鐘配置


void SOSC_init_8Mhz(void)
{
	SCG->SOSCDIV = 0x00000101;
	
	while(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK);//µÈ´ýSOSCCSR½âËø,¼Ä´æÆ÷½âËøºó²Å¿ÉдÈë

	SCG->SOSCCSR = 0x00000001;
	
	while(!(SCG->SOSCCSR &SCG_SOSCCSR_SOSCVLD_MASK));
	

}

void SPLL_init_160MHz(void )
{
	while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK);
	SCG->SPLLCSR = 0x00000000;
	
	
	SCG->SPLLDIV =0x00000302;
	SCG->SPLLCFG = 0x00180000;
	
	while(SCG->SPLLCSR &SCG_SPLLCSR_LK_MASK);
	
	SCG->SPLLCSR = 0x00000001;
	
	while(!(SCG->SPLLCSR & SCG_SPLLCSR_SPLLVLD_MASK));
	

void NormalRUNmode_40MHz(void)
{


	SCG->RCCR = SCG_RCCR_SCS(6)

	|SCG_RCCR_DIVCORE(0x01)
	|SCG_RCCR_DIVBUS(0x01)
	|SCG_RCCR_DIVSLOW(0x02);
	  
	while(((SCG->CSR &SCG_CSR_SCS_MASK) >>SCG_CSR_SCS_SHIFT)!=6)
	        {}
}

GPIO配置,PTE8 和PTB4、PTB5
void GPIO_Init(void)
{
    /*******LED---PTE8¶Ë¿ÚÅäÖÃ*******/
    PCC->PCCn[PCC_PORTE_INDEX]  |=  PCC_PCCn_CGC_MASK;
      PCC->PCCn[PCC_PORTB_INDEX]  |=  PCC_PCCn_CGC_MASK;   
    
    
    PTE->PDDR  |=  (1<<8);    
      PTB->PDDR  |=  (1<<4);     
    PTB->PDDR  |=  (1<<5);     

    PORTE->PCR[8] = 0x00000100;    //設置端口的 複用功能選項
      PORTB->PCR[4] = 0x00000100;
      PORTB->PCR[5] = 0x00000100;
    
      PTE->PCOR |= (1<<8);
        PTB->PCOR |= (1<<4);
        PTB->PCOR |= (1<<5);

}

直接上程序完整連接這個是S32 DS開發的這裏沒有曬程序

鏈接:https://pan.baidu.com/s/1R9A73UgJkWc_RsFU4A5qEQ 
提取碼:6zbo 

這個是上面示例程序的完整代碼


鏈接:https://pan.baidu.com/s/1HZvAF0QJNIxs_Y8pF7PwnQ 
提取碼:ki8a 
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章