請問...
我寫了一段RTSP燒錄程式
在一個程式碼很小(8KB)的測試程式裡
可以正常的清除+燒錄
但是跟另一個大型程式(30KB)整合時
(只有呼叫vRTSPEraseAll())
卻發生清除所有的Row後
程式執行一段時間後重置
(約3分鐘...時間固定..)
而清除的動作是在程式一開始的地方...
我試過如果將"BSET NVMCON,#15"
這一行移除就OK,程式就不會重置
但是也就不會執行清除的動作...
所以在想是不是清除錯誤...
還是說哪裡要設定??
----------------------------------------------------------------
以下是RTSP清除部分的程式...
#define RTSP_MEMORY_ADDRESS 0x6000
#define RTSP_ROW_SIZE_WORD 64
#define RTSP_ROW_NUM_MAX 8
#define RTSP_UNLOCK() asm volatile("DISI #5 \n" \
"MOV #0x55,W0 \n" \
"MOV W0,NVMKEY \n" \
"MOV #0xAA,W0 \n" \
"MOV W0,NVMKEY \n" \
"BSET NVMCON,#15\n" \ "NOP \n" \
"NOP " );
const WORD volatile __attribute__ ((address(RTSP_MEMORY_ADDRESS))) waRTSPMemory[512];
void vRTSPEraseAll()
{
WORD wAddr;
TBLPAG=((RTSP_MEMORY_ADDRESS & 0x7F0000)>>16);
wAddr=(RTSP_MEMORY_ADDRESS & 0x00FFFF);
asm volatile("TBLWTL %1, [%0]" : "+r"(wAddr) : "d"(wAddr)) ;
NVMCON=0x4042;
RTSP_UNLOCK();
//避免Compiler忽略
asm volatile("BTSC NVMCON,#15 \n" \
"BRA $-2") ;
}