eboot中读取寄存器中的值的方法
来源:互联网 发布:淘宝怎么参与团购 编辑:程序博客网 时间:2024/04/29 08:47
实现烧录器的烧录功能:
1. 在菜单中增加一项
2. 通过串口不断检测输入值
3. 通过值的选择来实现烧录功能
4. 烧录时需要检测flash 的状态:比如是坏的flash或者flash没有插入,如果异常就应当在屏幕上打印出相关信息,来提示用户当前flash状态,并且此时应当返回来等待用户的后续操作
5. 对flash的TOC要重新安装,来取得其块信息及状态
主要添加和修改函数如下:
MENU_ITEM * GetMainItem()
{
InitMenuItem(pItem++,('A'), ("SDMMC UpdateImage"), SDMMC_UpdateImage3,NULL, NULL, NULL, NULL);
}
extern BOOL TOC_Setup(void);
BOOL SDMMC_UpdateImage3(MENU_ITEM*pMenu)//(BOOLEAN *bDownload, BOOLEAN *bSDUpdateMode)(&g_bDownloadImage,&g_bSDUpdateMode)
{
//对该函数改写前,会一直读取ECC错误信息,调用其的函数
if(!FMDTEST_EraseBlock(0))
{
//当flash异常时,将其对应信息打印在屏幕上
BspEbootUpdateProgressBar(UPD_PHASE_ERROR1,(UCHAR)0);
return FALSE;
}
bRet= TOC_Setup();
if(!bRet)
{
EdbgOutputDebugString("TOC_Setuperror!!!/r/n");
}
}
//BOOL FMD_EraseBlock(BLOCK_ID blockID)如果用此函数来做判断,会执行//FMDSocEraseBlock(g_cs,dwBlockID)函数,来不断地读取flash状态信息,从而转去响应坏块信息,在这里,我们只要检测是否有FLASH插入即可
BOOL FMDTEST_EraseBlock(BLOCK_ID blockID)
{
DWORDdwBlockID = blockID;
ChipIdSerialTestId;
g_cs= TransBlock(dwBlockID);//
//g_pFlashExtInfo= &g_FlashInfoExHW[g_cs];
FMDSocReadFlashID(g_cs,&TestId);
RETAILMSG(1,(TEXT("TestId:%d,%d/r/n"),TestId.ucMakerId,TestId.ucDeviceId));
if((TestId.ucMakerId== 0)||(TestId.ucDeviceId== 0))
returnFALSE;
#if 0
if(!FMDSocEraseBlock(g_cs,dwBlockID))
{
RETAILMSG(DBG_ATLAS_ZONE_ERROR,(TEXT("ERROR: %s: FMD_EraseBlock failed!!!/r/n"),_T(__FUNCTION__)));
returnFALSE;
}
#endif
returnTRUE;
}
BOOL EdbgGetDebugChar(char * pChar)
{
char * p, c;
if (g_iDevStatus < ATLAS_DEV_STATUS_IN_USB_SESSION_EBOOT)
{
/****************************************************************************/
//EdbgOutputDebugString("/r/nEdbgGetDebugChar +++++++");
if (EbootGetPwrKeyFlag() == 1)
{
EdbgOutputDebugString("/r/nEdbgGetDebugCharget reset operation+++++++");
*pChar ='a';
return TRUE;
}
/****************************************************************************/
c = OEMReadDebugByte();
if (c == OEM_DEBUG_READ_NODATA)
return FALSE;
*pChar = c;
return TRUE;
}
}
获得reset按键pin脚的状态,可以通过读取其on_key_b对应的寄存器中的值,由原理图可知,
当按下的时候,其对应的值为低
int EbootGetPwrKeyFlag(void)
{
DWORDdwOnkeyPinStaus;
CHECK_CPU2IOBRG_SYNCING;
dwOnkeyPinStaus= PWRC_PIN_STATUS;
CHECK_CPU2IOBRG_SYNCING;
//EdbgOutputDebugString("EbootGetPwrKeyFlag:0x%x /r/n", dwOnkeyPinStaus);
if((dwOnkeyPinStaus&0x2 )==0)
return 1;
else
return 0;
}
//对于有些定义在特定文件中的变量,如果在其他地方使用可能会报错,
通常方式,可将其在使用的地方讲其声明的头文件包含进来,声明其为外部变量。
但是最可靠的方法是:讲该变量封装在一个函数中,以后需要使用时只需调用该函数,让其成为函数返回值即可
- eboot中读取寄存器中的值的方法
- 读取寄存器的值
- eboot的编译方法
- WINCE EBOOT的配置方法
- WINCE EBOOT的配置方法
- Linux_寄存器的读取
- 内核中操作寄存器的方法
- 通过I2C读取EEPROM中寄存器的值,获得的值越界
- 嵌入式 Linux应用程序如何读取(修改)芯片寄存器的值
- MTK怎么用adb读取pmic6329寄存器的值
- U盘启动并读取dx寄存器的值
- 寄存器操作的方法
- JSTL中读取集合中的各种方法
- CCS中寄存器定义方法
- 访问pci设备中寄存器的一些方法
- WinCE Eboot中的BLCOMMON
- WinCE Eboot中的BLCOMMON
- eboot中的中断初始化
- INLINE HOOK RING0
- windows 应用程序打包
- for 之 循环引发异常
- 语录
- linux密码破解与防破解
- eboot中读取寄存器中的值的方法
- 图解VMware内存机制(VMware的重要知识)
- [转]Windows Mobile开发资源介绍
- VMware内存分配初探
- 和字符串相关的几个面试题目
- s60的字符串描述符翻译(转)
- php连接sql server数据库实例
- windows 一些命令
- C# WndProc的使用方法 (转)