Hi,
I'm using MSP430FR5730 to store a camera flash counter in the FRAM. Both counter and start_flag are noinit variable, and are stored in the FRAM. Following code worked fine at simulation, however it does not work when a real camera flash fires. I toggled a pin to make sure the edge detection logic worked. When the flash fired, I could see the pin toggling on the oscilloscope every time. However, the counter never changed.
Does this mean that the FRAM can not be used in a such environment that may be a little noise? Or am I missing something here?
thanks
Peng
//////////////////////////////////////////////////////////////////////// // in the .cmd file //.TI.noinit : {} > FRAM /* For #pragma noinit */ //////////////////////////////////////////////////////////////////////// /* * ======== Standard MSP430 includes ======== */ #include <msp430.h> /* * ======== Grace related includes ======== */ #include <ti/mcu/msp430/Grace.h> #include "stdint.h" #include "driverlib.h" #include "board.h" /* * ======== main ======== */ #pragma NOINIT(counter) uint16_t counter; #pragma NOINIT(start_flag) uint16_t start_flag; int main(void) { Grace_init(); // Activate Grace-generated configuration // >>>>> Fill-in user code here <<<<< uint8_t port1, port1_delay; uint8_t i; //init counter at on a blank board if(start_flag != 0x1298) { start_flag=0x1298; counter=0; } GPIO_setOutputLowOnPin(GPIO_PORT_P2,GPIO_PIN4); port1=1; port1_delay=1; while(1){ port1=P2IN & BIT6; if((port1_delay!=0) && (port1==0)){ // falling edge for(i=0;i<100;i++); // delay about 1us port1=P2IN & BIT6; // verify the pin status again for de-jitter purpose if(port1==0){ // flash detected, increase the counter and write it back the FRAM counter++; GPIO_setOutputHighOnPin(GPIO_PORT_P2,GPIO_PIN4); // toggle the pin for debug purpose for(i=0;i<10;i++); GPIO_setOutputLowOnPin(GPIO_PORT_P2,GPIO_PIN4); } } port1_delay=port1; } return (0); }