TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430I2041启动程序后,初始化SD24采样,系统默认的16.348M时钟不对,并未找到如何恢复。如下是初始化的代码。

Other Parts Discussed in Thread:MSP430I2041

void vPortsd24Stop()
{
SD24INCTL2 &= ~SD24SC; // Set bit to start conversion
sd24OK = TRUE;
}

BOOL xPortsd24Init( UCHAR delay,UCHAR num)
{
BOOL bInitialized = TRUE;
sd24num = num;
// Configure GPIO
SD24CTL = SD24REFS; // Internal ref

SD24CCTL0 |= SD24GRP | SD24DF | SD24IFG | SD24SNGL; // Enable interrupt
SD24INCTL0 |= SD24INCH_6;
SD24CCTL1 |= SD24GRP | SD24DF | SD24IFG;
SD24CCTL2 |= SD24IE | SD24DF | SD24IFG;
SD24INCTL1 |= SD24GAIN_16;
SD24INCTL2 |= SD24GAIN_16;
SD24PRE1 = delay;
SD24PRE2 = delay;

delay_us(10);
return bInitialized;
}

Susan Yang:

“系统默认的16.348M时钟不对” 具体是指什么呢?能否详细说明下您的问题?

,

user5322468:

当程序运行了,我上面贴出来的代码后,系统的默认时间,就错误了。之后程序就运行不起来,

,

Susan Yang:

错误的具体表现是什么?我现在没有这个型号的板子,所以无法测试。

SD24是有官方例程的,您可以参考下MSP430Ware_3_80_07_00\examples\devices\MSP430i2xx\MSP430i20xx_Code_Examples\C的相关SD例程

,

user5322468:

运行了上面的代码后,在仿真,就会一直进入到LOW_LEVEL_INIT.c中的
REFCAL1=*(TLV_address_for_parse+TLV_CAL_REFCAL1);

程序无法正常运行

,

Susan Yang:

REFCAL1=*(TLV_address_for_parse+TLV_CAL_REFCAL1);

REF校验的前面已经是什么?是否是TLV校验没有通过,然后芯片直接进入了LPM4?

请您给出详细信息或者调试截图

,

user5322468:

在使用过程中,一块完整的片子,扫入代码,启动SD24后,一直进入low_level_init文件中system_pre_init中,

完整片子时钟测试输出是1.648M,运行程序后,通过IO输出时钟22.5M.使用的是smlck。

如下是sd24初始化和使用的low_level_init文件

BOOL xPortsd24Init( UCHAR delay,UCHAR num){ BOOL bInitialized = TRUE; sd24num = num; // Configure GPIO SD24CTL = SD24REFS; // Internal ref

SD24CCTL0 |= SD24GRP | SD24DF | SD24IFG | SD24SNGL; // Enable interrupt SD24INCTL0 |= SD24INCH_6; SD24CCTL1 |= SD24GRP | SD24DF | SD24IFG; SD24CCTL2 |= SD24IE | SD24DF | SD24IFG; SD24INCTL1 |= SD24GAIN_16; SD24INCTL2 |= SD24GAIN_16; SD24PRE1 = delay; SD24PRE2 = delay;

/*SD24_init(SD24_BASE, SD24_REF_INTERNAL); // Select internal REF SD24_initConverterAdvancedParam param = {0}; param. converter = SD24_CONVERTER_2; // Select converter param. conversionMode = SD24_SINGLE_MODE; // Select single mode param. groupEnable = SD24_NOT_GROUPED; // No grouped param. inputChannel = SD24_INPUT_CH_ANALOG; // Input from analog signal param. dataFormat = SD24_DATA_FORMAT_2COMPLEMENT; // 2鈥檚 complement data format param. interruptDelay = SD24_FOURTH_SAMPLE_INTERRUPT; // 4th sample causes interrupt param. oversampleRatio = SD24_OVERSAMPLE_256; // Oversampling ratio 256 param. gain = SD24_GAIN_1; // Preamplifier gain x1 SD24_initConverterAdvanced(SD24_BASE, 露m); delay cycles(0x3600); // Delay for 1.5V REF startup*/

delay_us(10); return bInitialized;}

#ifdef __TI_COMPILER_VERSION__int _system_pre_init(void)#elif __IAR_SYSTEMS_ICC__int __low_level_init(void)#elif __GNUC__extern int system_pre_init(void) __attribute__((constructor));int system_pre_init(void)#else#error Compiler not supported!#endif{ unsigned long *jtagPwd = (unsigned long *)JTAG_DIS_PWD1;

/* Feed the watchdog timer */ WDTCTL = WDTPW | WDTCNTCL;

/* Check JTAG password locations and disable JTAG if passwords don't match. * Else the JTAG will be enabled in the 64th cycle after reset. */ if ((*jtagPwd != 0x00000000) && (*jtagPwd != 0xFFFFFFFF)) { /* Disable JTAG */ SYSJTAGDIS = JTAGDISKEY; }

/* Calibration section * Check for the BORIFG flag in IFG1. Execute calibration if this was a BORIFG. * Else skip calibration */ if (IFG1 & BORIFG) { /* Perform 2's complement checksum on 62 bytes of TLV data */ unsigned int checksum = 0; unsigned char *TLV_address_for_parse = ((unsigned char *)TLV_START); unsigned int *TLV_address_for_checksum = ((unsigned int *)TLV_START + 1);

do { checksum ^= *TLV_address_for_checksum++; } while (TLV_address_for_checksum <= (unsigned int *)TLV_END);

checksum ^= 0xFFFF; checksum++;

/* If check sum is not correct go to LPM4 */ if (*((unsigned int *)TLV_START) != checksum) { /* Enter LPM4 if checksum failed */ __bis_SR_register(LPM4_bits); }

/* Check sum matched, now set calibration values */

/* Calibrate REF */ REFCAL1 = *(TLV_address_for_parse + TLV_CAL_REFCAL1); REFCAL0 = *(TLV_address_for_parse + TLV_CAL_REFCAL0);

/* Calibrate DCO */ CSIRFCAL = *(TLV_address_for_parse + TLV_CAL_CSIRFCAL); CSIRTCAL = *(TLV_address_for_parse + TLV_CAL_CSIRTCAL); CSERFCAL = *(TLV_address_for_parse + TLV_CAL_CSERFCAL); CSERTCAL = *(TLV_address_for_parse + TLV_CAL_CSERTCAL);

/* Calibrate SD24 */ SD24TRIM = *(TLV_address_for_parse + TLV_CAL_SD24TRIM);

/* Clear BORIFG */ IFG1 &= ~(BORIFG); }

/* Feed the watchdog timer */ WDTCTL = WDTPW | WDTCNTCL;

/* Return value: * 1 – Perform data segment initialization. * 0 – Skip data segment initialization. */ return 1;}

,

灰小子:

你是不是有使用到大数组比较占用存储空间,或者需要较长时间进行初始化的内容?

,

user5322468:

我看map文件里面都还有剩余的空间,初始化的时候,只是做了个结构体的赋值,和flash读取,然后就是初始化SD24。

,

user4380693:

作为一个用msp430i2041开发过6个项目的人告诉你,这个芯片用不了通讯类的和计时类的项目,内部时钟周期太不准了16.348是个呵呵的数据,每个单片机的真实 周期按照实测为准,想用串口通讯的,会有些麻烦

赞(0)
未经允许不得转载:TI中文支持网 » MSP430I2041启动程序后,初始化SD24采样,系统默认的16.348M时钟不对,并未找到如何恢复。如下是初始化的代码。
分享到: 更多 (0)