|
本帖最后由 springvirus 于 2022-5-1 11:22 编辑
前几年从TI申请的MSP430样片,趁着JLC的打板包邮,做几块玩玩,后面准备把手头的华科尔遥控器主控换掉,用MSP430+NRF24L01,这样把接收器之类的都去掉,发送端和接收端都是自主控制板+自有协议,可以任意开发,随意玩耍,^O^
把BSL的CH341A和1611最小系统,做到一起了也预留了RTC RX8025的位置
3D图
LCEDA的工程已共享在开源广场-》https://oshwhub.com/springvirus/New_Project-CfnFzRL3l
板子焊接后,用JTAG+CCS 11.1.0.00011玩一下,使能XT2的高速时钟,这里接入8MHz,不使用LFXT1
4个LED,500ms翻转一次,闪烁正常
全部的IO口都正常,也可以使能MCLK,SMCLK,ACLK的输出,看看时钟
代码如下:
//以下配置,需要配置成XT2CLK 8MHz -> MCLK = 8MHz
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
void sys_init(void)
{
u32 i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
#if 0
//user guide page116
//DCO=3, RSEL=6, VCC=3V, Fdco = 2MHz, to be tested.
//DCO=7, RSEL=7, VCC=3V, Fdco = 4.9MHz, to be tested.
//DCOCTL |= (1<<7)|(1<<6)|(1<<5); //max DCO
DCOCTL |= (1<<6)|(1<<5);
DCOCTL &= ~(1<<7); //DCO = 3
DCOCTL &= ~((1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0)); //MOD = 00000
#endif
//XT2 8MHz oscillator + 30PF *2 will be installed, LFXT1 32.768KHz will not be installed on board.
DCOCTL = 0x00;
BCSCTL1 &= ~(1<<7); //XT2 is on
BCSCTL1 &= ~((1<<6)); //LFXT1CLK, low frequency mode, in __bis_SR_register(SCG0+OSCOFF+GIE); already turn off
BCSCTL1 &= ~((1<<5)|(1<<4)); //[5:4]=00, divider = 1, from LFXT1CLK for ACLK, in __bis_SR_register(SCG0+OSCOFF+GIE); already turn off
BCSCTL1 &= ~((1<<2)|(1<<1));
BCSCTL1 &= ~((1<<0)); //RSEL = 0
do {
//clear oscillator fault flag
IFG1 &= ~(OFIFG);
//delay, wait XT2 works normally
for(i=255;i>0;i--);
}while((IFG1 & OFIFG) != 0); //justify XT2 is ok or not.
//------------------
BCSCTL2 |= (1<<7);
BCSCTL2 &= ~((1<<6)); //select XT2CLK for MCLK
BCSCTL2 &= ~((1<<5)|(1<<4)); //[5:4]=00, divider = 1, for MCLK, MCLK = XT2CLK = 8MHz
BCSCTL2 |= (1<<3); //select XT2CLK for SMCLK
BCSCTL2 &= ~((1<<2)|(1<<1)); //[2:1]=00, divider = 1, for SMCLK, SMCLK = XT2CLK = 8MHz
BCSCTL2 &= ~(1<<0); //DCO resistor select internal resistor
}
void gpio_init_test(void)
{
P1SEL = 0x00;
P2SEL = 0x00;
P3SEL = 0x00;
P4SEL = 0x00;
P5SEL = 0x00;
P6SEL = 0x00;
//1-output 0-input
//P1口
P1OUT = 0x00;
P1DIR = 0xFF;
//P2口
P2OUT = 0x00;
P2DIR = 0xFF;
//P3口
P3OUT = 0x00;
P3DIR = 0xFF;
//P4口
P4OUT = 0x00;
P4DIR = 0xFF;
//P5口
P5OUT = 0x00;
P5DIR = 0xFF;
//P6口
P6OUT = 0x00;
P6DIR = 0xFF;
//P5SEL |= (1<<6)|(1<<5)|(1<<4);
//P5.6-ACLK output, P5.5 -SMCLK output, P5.4 - MCLK output
//P5DIR |= (1<<6)|(1<<5)|(1<<4);
}
void global_isr_enable(void)
{
/*
MSP430x1xx user's guide.pdf page32
SCG1 SCG0 OSCOFF CPUOFF Mode
0 0 0 0 Active CPU is active, all enabled clocks are active
0 0 0 1 LPM0 CPU, MCLK are disabled, SMCLK, ACLK is active
0 1 0 1 LPM1 CPU, MCLK, DCO osc. are disabled, SMCLK, ACLK is active
1 0 0 1 LPM2 CPU, MCLK, SMCLK, DCO osc. are disabled, ACLK is active
1 1 0 1 LPM3 CPU, MCLK, SMCLK, DCO osc. are disabled, ACLK is active
1 1 1 1 LPM4 CPU and all clocks disabled
*/
//__bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
//turn off the LFXT1 crystal oscillator. (OSCOFF)
//turn off DCO. (SCG0)
//use XT2 for MCLK and SMCLK.
__bis_SR_register(SCG0+OSCOFF+GIE);
}
int main(void)
{
static u32 led_timer;
u8 uret8 = 0;
sys_init();
gpio_init_test();
global_isr_enable();
while(1)
{
//实际测量延时函数,微秒级和毫秒级符合要求。
P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00;
delay_ms(500);
P1OUT = 0xff;P2OUT = 0xff;P3OUT = 0xff;P4OUT = 0xff;P5OUT = 0xff;P6OUT = 0xff;
delay_ms(500);
}
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|