這段時間一直在學習這個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