MSP432-SysTick(滴答定时器)

目录

一、registers

二、SysTick_Init

(一)initialize SysTick without interrupts --- check COUNTFLAG

(二)initialize SysTick with interrupts --- SysTick_Handler()


一、registers

MSP432的System Timer滴答定时器是一个24位的自减计数器。该定时器包含3个寄存器,见下表:

MSP432-SysTick(滴答定时器)_第1张图片

 STCSR(Systick Control and Status Register):用于配置其时钟,启用计数器,启用SysTick中断,并确定计数器状态。

MSP432-SysTick(滴答定时器)_第2张图片

STRVR(SysTick Reload Value Register):使用SysTick重新加载值寄存器指定要加载的起始值。当计数器达到0时,输入当前值寄存器。它可以是介于1和0x00FFFFFF之间的任何值。起始值为0是可能的,且但没有作用,因为从1计数到0时,SysTick中断和COUNTFLAG标志位被激活。

STCVR(SysTick Current Value Register):提供计数器的current 计数值。

MSP432-SysTick(滴答定时器)_第3张图片

二、SysTick_Init

复位时,未定义SysTick计数器重新加载和当前值;初始化SysTick计数器步骤为:

1.设置STRVR寄存器中的重装载值reload;

2.向STCVR寄存器中写入任意值,以清除该寄存器;

3.根据所需配置STCSR寄存器

(一)initialize SysTick without interrupts --- check COUNTFLAG

// assumes 48 MHz bus clock

void SysTick_Init(void){
  SysTick->LOAD = 0x00FFFFFF;           // maximum reload value
  SysTick->CTRL = 0x00000005;           // bus clock, enable SysTick with no interrupts
  SysTick->VAL = 0;          // any write to CVR clears it and COUNTFLAG in CSR
}

// method : set Reload Value Register, clear Current Value Register, poll COUNTFLAG in Control and Status Register
void SysTick_Wait(uint32_t delay){
  if(delay <= 1){
    // without this step:
    // if delay == 0, this function will wait 0x00FFFFFF cycles
    // if delay == 1, this function will never return (because COUNTFLAG is set on 1->0 transition)
    return;                   // do nothing; at least 1 cycle has already passed anyway
  }
  SysTick->LOAD = (delay - 1);// count down to zero
  SysTick->VAL = 0;          // any write to CVR clears it and COUNTFLAG in CSR
  while(( SysTick->CTRL&0x00010000) == 0){};//check COUNTFLAG
  
// Time delay using busy wait.
void SysTick_Wait10ms(uint32_t delay){
  uint32_t i;
  for(i=0; i

(二)initialize SysTick with interrupts --- SysTick_Handler()

// **************SysTick_Init*********************
// Initialize SysTick periodic interrupts
// Input: interrupt period
//           Units of period are in bus clock period
//           Maximum is 2^24-1
//           Minimum is determined by execution time of the ISR
// Input: priority 0 (high) to 7 (low)
// Output: none
void SysTick_Init(uint32_t period, uint32_t priority){
  SysTick->CTRL = 0;              // 1) disable SysTick during setup
  SysTick->LOAD = period - 1;     // 2) reload value sets period
  SysTick->VAL = 0;               // 3) any write to current clears it
  SCB->SHP[11] = priority<<5;     // set priority into top 3 bits of 8-bit register
  SysTick->CTRL = 0x00000007;     // 4) enable SysTick with core clock and interrupts
}

void SysTick_Handler(void){
  
}

你可能感兴趣的:(MSP432-RSLK小车,单片机,嵌入式硬件)