这里是切换到SWD模式并且读取IDR的函数。
int iLibSwdSwitch2SWD(void)
{
unsigned int i;
for(i=0;i<SWD_SLT_R_CNT;i++)
{
iLibSwdPortInit(def_false);
iLibSwdPortInit(def_true);
for(i=0;i<SWD_RST_H_BYTES;i++)
cBitsSwdOutput[i] = 0xff;
iLibSwdMosi(iBitAddress(cBitsSwdOutput,0),(SWD_RST_H_BYTES * 8));
cBitsSwdOutput[0] = 0x9e;
cBitsSwdOutput[1] = 0xe7;
iLibSwdMosi(iBitAddress(cBitsSwdOutput,0),(2 * 8));
for(i=0;i<SWD_RST_H_BYTES;i++)
cBitsSwdOutput[i] = 0xff;
iLibSwdMosi(iBitAddress(cBitsSwdOutput,0),(SWD_RST_H_BYTES * 8));
/*
cBitsSwdOutput[0] = 0xb6;
cBitsSwdOutput[1] = 0xed;
iLibSwdMosi(iBitAddress(cBitsSwdOutput,0),(2 * 8));
*/
vLibSwdLineReset();
cBitsSwdOutput[0] = SWD_HOST_RD_DPIDR;
iLibSwdMosi(iBitAddress(cBitsSwdOutput,0),(1 * 8));
cBitsSwdInput[0] = 0;
iLibSwdMiso(iBitAddress(cBitsSwdInput,0),3);
if((cBitsSwdInput[0] & 0x07) == 0x01)
{
iLibSwdMiso(iBitAddress(cBitsSwdInput,0),33);
return(*(unsigned int*)cBitsSwdInput);
}
}
return(-1);
}
如果成功读取会返回一个指针,这个指针对应的缓冲区是预先申请好的,由于程序没有改完,所以这里还不太好看。大家自己发挥吧。
|