Unable to "Disable Watchdog" for F2812 target

Hi,

I am trying to develop an application to perform Flash operations for F2812 target with Parallel Port using Commandline mode.

When i use the SDFlash Utilty (SDFlash.exe) directly, there were no issues in performing Flash operations for F2812 target using Parallel Port.

But my application is unable to Disable the Watchdog, and i get the Error : "Failed to Disable the Watchdog". I guess it has something to do with not executing EALLOW and EDIS before the protected regiters are accessed.

The following below is the code snippet for Disable watchdog :-

BOOL Disable_WD() { BOOL Success; MEM_TADDR Addr; TREG_16 Data; /* Enable WD override */ //*0x7029 = *0x7029 | 0x0068; //*0x7025 = 0x0055; //*0x7025 = 0x00AA; Addr = 0x7029; Success = T28x->ReadMemory( Addr, M_DATA, &Data, 1 ); if( Success == FALSE ) return( FALSE ); Data |= 0x0068; Success = T28x->WriteMemory( Addr, M_DATA, &Data, 1 ); if( Success == FALSE ) return( FALSE ); Addr = 0x7025; Data = 0x0055; Success = T28x->WriteMemory( Addr, M_DATA, &Data, 1 ); if( Success == FALSE ) return( FALSE ); Data = 0x00AA; Success = T28x->WriteMemory( Addr, M_DATA, &Data, 1 ); return( Success ); }

The following piece of code does not seem to disable the watchdog in F2812 during a cold restart (Power OFF and Power ON). The function "T28x->ReadMemory" returns FALSE as it is unable to read the address

0x7029.

But once the SDFlash utlity was used to Erase, Program and Verify the DSC, the above code does seem to disable the watchdog. That is, when i use my commandline mode application, for the second time after the SDFlash Utility, this disabling of watchdog works.

Waiting for response from anyone.

Thanks & Regards, Marcos.

Reply to
Marcos
Loading thread data ...

On Tue, 28 Jul 2009 00:24:48 -0500, "Marcos" wrote in comp.arch.embedded:

If you KNOW that your code is missing a required EALLOW, why don't you add it?

Whose idea was it to make a C++ member function to read a value from a memory address? How could it possible fail? What's the matter with the code that was commented out? Or even better, using the macros and headers supplied with Code Composer Studio, that would have compiled to the same object code and been much more legible?

Maybe you'd better skip the 2812 and go to the 300MHz Delfino parts if you're generating this kind of bloat.

What exactly is in this stupid function that it can tell it fails READING from a memory address? Since it does not know what the address is supposed to contain, how does it know what it read is wrong?

Does it do something really dumb like reading the address more than once and comparing the contents to see if they are equal? There may be a good reason to do this, but almost never when reading memory-mapped hardware registers.

Or is it the write function that fails? Does it do something equally inappropriate like try to read back what it just wrote? Again, that's usually not a good idea when dealing with memory-mapped hardware.

I don't have TI documentation for the 2812 here, it's at work, and I don't remember what is at address 0x7029 or what is supposed to happen when you or in those three bits. But the rest of the function, writing 0x55 and then 0xAA to the same address, is almost certainly resetting the watchdog, and probably starting it again if it was actually stopped.

Have you read the data sheet for the watchdog timer on the 2812?

How do you know that the function is returning the right value? How does it decide FALSE or not FALSE?

--
Jack Klein http://JK-Technology.Com
FAQs for
news:comp.lang.c http://c-faq.com/
news:comp.lang.c++ http://www.parashift.com/c++-faq-lite/news:alt.comp.lang.learn.c-c++
http://www.club.cc.cmu.edu/~ajo/docs/FAQ-acllc.html
Reply to
Jack Klein

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.