MSP432-SysTick(滴答定时器)

目录

一、registers

二、SysTick_Init

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

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


一、registers

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

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

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

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

二、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<delay; i++){
    SysTick_Wait(480000);  // wait 10ms (assumes 48 MHz clock)
  }
}

(二)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){
  
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MSP432 低功耗高性能并存10.1 Digital I/O Introduction The digital I/O features include: • Independently programmable individual I/Os • Any combination of input or output • Individually configurable interrupts for ports (available for certain ports only) • Independent input and output data registers • Individually configurable pullup or pulldown resistors • Wake-up capability from ultra-low power modes (available for certain ports only) • Individually configurable high drive I/Os (available for certain I/Os only) Devices within the family may have up to eleven digital I/O ports implemented (P1 to P10 and PJ). Most ports contain eight I/O lines; however, some ports may contain less (see the device-specific data sheet for ports available). Each I/O line is individually configurable for input or output direction, and each can be individually read or written. Each I/O line is individually configurable for pullup or pulldown resistors. Certain ports have interrupt and wake-up capability from ultra-low power modes (see device specific data sheet for ports with interrupt and wake-up capability). Each interrupt can be individually enabled and configured to provide an interrupt on a rising or falling edge of an input signal. All interrupts are fed into an encoded Interrupt Vector register, allowing the application to determine which sub-pin of a port has generated the event. Individual ports can be accessed as byte-wide ports or can be combined into half-word-wide ports. Port pairs P1 and P2, P3 and P4, P5 and P6, P7 and P8, and so on, are associated with the names PA, PB, PC, PD, and so on, respectively. All port registers are handled in this manner with this naming convention. The main exception are the interrupt vector registers, for example, interrupts for ports P1 and P2 must be handled through P1IV and P2IV, PAIV does not exist. When writing to port PA with half-word operations, all 16 bits are written to the port. When writing to the lower byte of port PA using byte operations,

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值