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

S32K144点灯,通过RTC秒中断进行闪烁并支持RTT打印,S32 Designed stdio 和MDK5分别实现_第1张图片

以下是关于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 
 

 

你可能感兴趣的:(c,S32K144)