不好意思,想问一下DTC直接写Flash的问题,按照手册上的说法,DTC可以直接写Anywhere?但是我往0xe800的Flash的位置写值,却读不出来。PS:0xe800这个地址值是查.map文件找到的。我把0xe800的地址改成0x200(ram的地址,也是示例中DTC写入的位置),程序又能正常运行。我的测试方法是,往A4(P1.4)接入一个0.5V的直流电压,当地址为0x200时得到temp变量的值为217左右,符合实际,当地址用0xe800时得到temp的最终值为65536(flash全为1,没有写入内容?)。我想知道这个怎么回事,谢谢~ ^_^
我的程序代码如下:
#include <msp430G2553.h>
/*
* main.c
*/
#define uint unsigned int
#define u8 unsigned char
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
// VREF-VSS 4x MSC REF 2.5V ON IE
ADC10CTL0 = SREF_1 + ADC10SHT_0 + MSC + REFON + REF2_5V + ADC10ON + ADC10IE;
// Repeat-S A4 ADC10OSC ADC10DIV_0
ADC10CTL1 = CONSEQ_2 + INCH_4 + ADC10SSEL_0 ;
ADC10AE0 = 0x10;//A4
//
ADC10DTC0 = ADC10TB;
//128 points *2?
ADC10DTC1 = 0x80;
P1DIR |= 0x01; // Set P1.0 to output direction
ADC10CTL0 &= ~ENC;
while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active
ADC10SA = 0xe800; // Data buffer start
P1OUT |= 0x01; // Set P1.0 LED on
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
P1OUT &= ~0x01; // Clear P1.0 LED off
volatile unsigned int i,temp;
for(i=0;i!=128;++i)
{
temp = *(u8 *)(0xe800+2*i);
temp = temp << 8;
temp |= *(u8 *)(0xe800+2*i+1);
}
return 0;
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
}