S32K144之寄存器工程LED_S32K144

S32K144之寄存器工程LED_S32K144

S32K144 NXP原厂提供了很完善的SDK包,几乎涵盖了客户所能用到的全部底层驱动,基于Processer Expert代码生成组件,可以通过GUI配置之后很方便的生成代码。
但是撸寄存器一直是弱项,也一直想找个机会进行锻炼,基于此,原厂也只提供了很少一部分寄存器的底层驱动代码,所以在此当做记录以及督促自己。
玩板子的第一步,点亮LED灯,基于S32 Design Studio for ARM Version 2.2开发环境的工程附上:链接:https://pan.baidu.com/s/1PREbi_cfN70L6gHaDrdw-A 提取码:jw3b

1、时钟配置代码,这个直接用的现成代码

/*
 * clk.c
 */
#include "CLK.h"
#include "s32k144.h"



void SOSC_init_8MHz(void) {
  SCG->SOSCDIV=0x00000101;  /* SOSCDIV1 & SOSCDIV2 =1: divide by 1 */
  SCG->SOSCCFG=0x00000024;  /* Range=2: Medium freq (SOSC betw 1MHz-8MHz)*/
                            /* HGO=0:   Config xtal osc for low power */
                            /* EREFS=1: Input is external XTAL */
  while(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK); /* Ensure SOSCCSR unlocked */
  SCG->SOSCCSR=0x00000001;  /* LK=0:          SOSCCSR can be written */
                            /* SOSCCMRE=0:    OSC CLK monitor IRQ if enabled */
                            /* SOSCCM=0:      OSC CLK monitor disabled */
                            /* SOSCERCLKEN=0: Sys OSC 3V ERCLK output clk disabled */
                            /* SOSCLPEN=0:    Sys OSC disabled in VLP modes */
                            /* SOSCSTEN=0:    Sys OSC disabled in Stop modes */
                            /* SOSCEN=1:      Enable oscillator */
  while(!(SCG->SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK)); /* Wait for sys OSC clk valid */
}

void SPLL_init_160MHz(void) {
  while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); /* Ensure SPLLCSR unlocked */
  SCG->SPLLCSR = 0x00000000;  /* SPLLEN=0: SPLL is disabled (default) */
  SCG->SPLLDIV = 0x00000302;  /* SPLLDIV1 divide by 2; SPLLDIV2 divide by 4 */
  SCG->SPLLCFG = 0x00180000;  /* PREDIV=0: Divide SOSC_CLK by 0+1=1 */
                              /* MULT=24:  Multiply sys pll by 4+24=40 */
                              /* SPLL_CLK = 8MHz / 1 * 40 / 2 = 160 MHz */
  while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); /* Ensure SPLLCSR unlocked */
  SCG->SPLLCSR = 0x00000001; /* LK=0:        SPLLCSR can be written */
                             /* SPLLCMRE=0:  SPLL CLK monitor IRQ if enabled */
                             /* SPLLCM=0:    SPLL CLK monitor disabled */
                             /* SPLLSTEN=0:  SPLL disabled in Stop modes */
                             /* SPLLEN=1:    Enable SPLL */
  while(!(SCG->SPLLCSR & SCG_SPLLCSR_SPLLVLD_MASK)); /* Wait for SPLL valid */
}


void clk_init()
{

	SCG->RCCR=SCG_RCCR_SCS(6)      /* PLL as clock source*/
	    |SCG_RCCR_DIVCORE(0b01)      /* DIVCORE=1, div. by 2: Core clock = 160/2 MHz = 80 MHz*/
	    |SCG_RCCR_DIVBUS(0b01)       /* DIVBUS=1, div. by 2: bus clock = 40 MHz*/
	    |SCG_RCCR_DIVSLOW(0b10);     /* DIVSLOW=2, div. by 2: SCG slow, flash clock= 26 2/3 MHz*/
	  while (((SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT ) != 6) {}
	                                 /* Wait for sys clk src = SPLL */

}

2、gpio初始化

/*
 * gpio.c
 *
 *  Created on: 2020年6月10日
 *      Author: Administrator
 */
#include "s32k144.h"
#include "S32K144_features.h"
#include "gpio.h"


void gpio_init()
{


	PCC->PCCn[PCC_PORTD_INDEX] |= PCC_PCCn_CGC_MASK;

	  PORTD->PCR[PTD0]  =  0x00000100;  /* Port D0: MUX = GPIO */
	  PORTD->PCR[PTD15] =  0x00000100;  /* Port D15: MUX = GPIO */
	  PORTD->PCR[PTD16] =  0x00000100;  /* Port D16: MUX = GPIO */

	  PTD->PDDR |= 1<<PTD0;       	  /* Port D0:  Data Direction= output */
	  PTD->PDDR |= 1<<PTD15;          /* Port D15: Data Direction= output */
	  PTD->PDDR |= 1<<PTD16;          /* Port D16: Data Direction= output */

	  PTD->PSOR |= 0XFFFFFFFF;
}

3、main函数点灯

/*
 * main.c              Copyright NXP 2016
 * Description:  Simple program to exercise ADC.
 * Use potentiometer on board to turn on RGB led
 * 2016 Jul 16 Osvaldo Romero: Initial version
 * 2016 Oct 31 SM: Clocks adjusted for 160 MHz SPLL
 * 2017 Jun 30 SM  Split adcResultInMv into separate global variables
 */

#include "S32K144.h" /* include peripheral declarations S32K144 */
#include "gpio.h"
#include "CLK.h"


  uint32_t adcResultInMv_pot = 0;
  uint32_t adcResultInMv_Vrefsh = 0;

void delay(uint32_t i)
{
	while(i--);
}



int main(void)
{
  SOSC_init_8MHz();      /* Initialize system oscillator for 8 MHz xtal */
  SPLL_init_160MHz();    /* Initialize SPLL to 160 MHz with 8 MHz SOSC */
  clk_init();
  gpio_init();		     /* Init  port clocks and gpio outputs */


  for(;;) {

	      PTD->PCOR |= 1<<PTD0;       	  /* Port D0:  blue */
	      delay(0xfffff);
	      PTD->PSOR |= 1<<PTD0;

	      PTD->PCOR |= 1<<PTD15;       	  /* Port D15:  red */
	      delay(0xfffff);
	      PTD->PSOR |= 1<<PTD15;

	      PTD->PCOR |= 1<<PTD16;       	  /* Port D16:  green */
	      delay(0xfffff);
	      PTD->PSOR |= 1<<PTD16;

  }
}

在这里需要说明一点,工程中的APP文件夹是我新添加的,如果自己新建工程需要把这个APP编译路径添加进去,不然会报错,添加操作如下:
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值