msp432的systick问题

问题1:文档说不能使用外部时钟,那是可以使用内部任何时钟么?

问题2:以下不实用中断的systick不能用,不知哪里出错、帮忙看下

问题3:当引脚设置为外部时钟, 引脚是不是要设置输出,再设置PJSELx呢?

include <msp432p401r.h>
#include "CS.h"


static uint8_t fac_us=0; //us延时倍乘数
static uint16_t fac_ms=0;

void Delay_Init()
{
SysTick->CTRL &= ~SysTick_CTRL_CLKSOURCE //外部时钟
SysTick->CTRL |= SysTick_CTRL_ENABLE; //使能systick
fac_us =CS_getMCLK()/1000000;
fac_ms = (uint16_t)(fac_us*1000);

}

void Delay_ms(uint16_t nms) //nms<=0xffffff*1000/SYSCLK
{
uint32_t temp;
SysTick->LOAD = (uint32_t)nms*fac_ms; //时间加载
SysTick->VAL = 0X00; //清空计数器
SysTick->CTRL = 0X01; //开始倒数
do
{
temp= SysTick->CTRL ;
}while((temp&0x01)&&!(temp&(1<<16)));//等到时间到达

SysTick->CTRL = 0X00; //关闭计数器
SysTick->VAL = 0X00; //清空计数器
}
void CS_HFXTCLK()
{
PJSEL0 |= BIT2 + BIT3;
PJSEL1 &= ~(BIT2+ BIT3); //设置晶振引脚
CSKEY =CSKEY_VAL; //解锁时钟寄存器
CSCTL2 |=HFXT_EN; //HFXT 打开
do{
CSCLRIFG |= CLR_HFXTIFG | CLR_DCORIFG; //清中断标志位
SYSCTL_NMI_CTLSTAT &= ~ SYSCTL_NMI_CTLSTAT_CS_SRC; //禁止NMI中CS中断
}
while(SYSCTL_NMI_CTLSTAT & SYSCTL_NMI_CTLSTAT_CS_FLG);
CSCTL1 |=(DIVA__32 | SELA__REFOCLK)|(DIVS__32 | SELS__HFXTCLK)|(DIVM__8 | SELM__HFXTCLK);
CSKEY =0; //锁住时钟寄存器

}

void main(void)
{
volatile uint32_t i;

WDTCTL = WDTPW | WDTHOLD; // Stop WDT

P1DIR|=BIT0 ; //P1.0设置为输出
P2DIR |=BIT0+BIT1+BIT2; //P2.0,P2.1设置为输出

CS_HFXTCLK();
Delay_Init();

while(1)
{
P2OUT |=BIT1;
P2OUT&=~BIT2;
P2OUT&=~BIT0;


Delay_ms(1000);

}
}