您好!
我在自己设计的电路板上使用 MSP430F67641编写论文代码。
我需要设置 Σ-Δ 模块来测量市电交流电压、但我总是从转换存储器寄存器中读取0值。
有时、我能够从 SD24存储器寄存器中捕获一些随机数据、因此我非常确定存在一些软件错误、
除了 SD24模块之外、一切都正常。
SD 由偏离16的 SMCLK (16MHz)计时,以通过所选 uC 的最大要求。
代码如下:
#include #include #include void CLOCKinit (void); void GPIOinit (void); void USCIinit (void); void TIMERinit (void); void LEDseq (void); void SD24Binit (void); void USCI_SEND_string (char*); void USCI_SEND_CHAR (char); unsigned long SD24B_RESULT = 0;//Sigma - delta unsigned long SD24B_RESULT_2 = 0;//Sigma - delta long 计数器= 0; int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 CLOCKinit(); GPIOinit(); TIMERinit(); USCIinit(); SD24BIINIT(); _Bis_SR_register (GIE);//全局中断使能 字符缓冲区[32]; for (;;) { SD24BCCTL0 |= SD24SC; sprintf (buffer、"SD24B_buff:%ld\t:\t%ld n\r\n "、SD24B_result、counter); USCI_SEND_string (&buffer[0]); for (long i=0;i<200000;i++){}; LEDseq(); } 返回0; } void CLOCKinit (void) { UCSCTL1 = DCORSEL_4; UCSCTL3 = SELREF__REFOCLK;//FLL 基准时钟-> REFO (32、768 KHz) UCSCTL2 = 0x0000; UCSCTL2 |= 487 | FLLD__1;//FLLN = 487 / FLLD = 2; UCSCTL4 = OUT_DCOCLK | SELM_DCOCLK; } void LEDseq (void) { static unsigned short shift = 0; if (shift < 2) shift +; else {OUT= 0 ; }P4OUT = 0;P4OUT = 1 (void)(void)(void)(void)(void)(void)(void)(void)(void ~ RXD 输入 // P2.3 -> TXD 输出 P2SEL = BIT2 | BIT3; UCA2CTL1 &=~UCSWRST; } void SD24BIIT (void) { //时钟源= SMCLK //时钟源分频/ 16 //内部参考 SD24BCTL0 = SD24PDIV_4;SD24BCL0 = SD24BSDBCLK ;SD24BSDBCL0 = SD24SDBCLK= SD24BSDBSDBCL0;SD24BSDBCLK= SD24SDBSDBCLK= SD24BSDBSD24CLK= SDBSDBSD24CL0;SDBSD24CLK= SD24BSD24 _DELAY_CYCLES (0x3600); } void USCI_SEND_string (char * buffer) { while (* buffer) { USCI_SEND_CHAR (* buffer++); } void USCI_SEND_CHAR ( ~ void char_TO_SEND){UCA2TXBUF = char_TO_SEND;while (UCA2STAT_TRISR_TO_SEND)}(void) (void USCI_TRISR_TRIB_TRIB_0_TO_TRUCCTRU0_TRIB_TRU_TRU0)(void)(void (_ TO_TRIF_TRIB_TRIB_TRIB_TRIB_0_TRU_TRU_TRIBU_TRU_TRU 开关(SD24BIV) { 案例 SD24BIV_SD24OVIFG: // SD24MEM 溢出 中断; 案例 SD24BIV_SD24TRGIFG: // SD24触发 IFG 中断; 案例 SD24BIV_SD24IFG0: // SD24MEM0 IFG SD24B_RESULT =(SD24BMEMH0); SD24B_RESULT =(SD24B_RESULT<<16)| SD24BMEML0; COUNTER++; 中断; SD24BIV_SD24IFG1案例: // SD24MEM1 IFG 中断; SD24BIV_SD24IFG2案例: // SD24MEM2 IFG 中断; } }
电路板原理图(基于 TIDM-THDREADING 参考设计):
e2e.ti.com/.../board_5F00_schematic.pdf
请帮帮我。