?? radiomodulehwdrv.c
字號:
//***************************************************************
// ARM BOOT ROUTE VER1.0 for NXP_ARM release
// bjwork2007@gmail.com
// chenjun @ 2008-7-19
//***************************************************************
#include "..\inc\NXP_ARM.h"
#include "..\inc\usart.h"
#include "..\inc\sysinit.h"
#include "..\inc\common.h"
#include "..\inc\RadioModuleHwDrv.h"
#ifdef UseSI473X_Radio
void ResetRadioModule(void)
{
/*
P0.2 SCL, P0.3 SDA, P3.0 RESET
P0.23 TEST, P0.20 nINT
RESET Time:
RST :____________|-----------------------
TEST :__|---------------------------------
nINT :___________________|----------------
SDA :__________________________|---------
SCL :__|---------------------------------
| 1 | 2 | 3 */
SetResetOut();
ClrReset();
SetSCLOut();
SetSDAOut();
SetGpo12Out();
SetTest();
ClrnINT();
ClrSDA();
SetSCL();
Delay(1500);
SetReset();
Delay(50);
SetnINT();
SetGpo12In();
Delay(500);
SetSDA();
Delay(100);
}
RM_U8 OpRadioModule(RM_U8 OpMode,RM_U8 *Data,RM_U8 NumDataBytes)
{
RM_U8 loop;
RM_U8 DeviceSlaveAddr;
RM_U8 RemainByteNum;
SetSDAOut();
SendIICStart();
if(OpMode == WriteOp)
DeviceSlaveAddr = RadioSlaveAddrWrtie;
else if(OpMode == ReadOp)
DeviceSlaveAddr = RadioSlaveAddrRead;
else
{
#ifdef Radio_Module_Console_Debug
puts("Send Invalid OpMode to OpRadioModule IIC,only W/R mode!\n");
#endif
return TwiInvOp;
}
//send device slave addr
for(loop=8;loop>0;loop--)
{
if((DeviceSlaveAddr & (1<<(loop-1))) != 0x00)
SetSDA();
else
ClrSDA();
Delay1US3();SetSCL();Delay2US5();ClrSCL();Delay1US3();
}
//check device slave addr ack bit
SetSDAInput();ClrSDA();
Delay1US3();
SetSCL();
if(GetSDA() != 0x00)
{
Delay2US5();ClrSCL();SetSDAOut();Delay1US3();
SendIICStop();
#ifdef Radio_Module_Console_Debug
puts("Send Device Slave Addr NoACK!\n");
#endif
return TwiNoAck;
}
Delay2US5();ClrSCL();Delay1US3();
//Send CMD or Read Info
for(RemainByteNum=NumDataBytes; RemainByteNum>0 ; RemainByteNum--,Data++)
{
if(OpMode == WriteOp)
SetSDAOut();
else
SetSDAInput();
for(loop=8;loop>0;loop--)
{
if(OpMode == WriteOp)
{
if(((*Data >> (loop-1)) & 0x01) != 0x00)
SetSDA();
else
ClrSDA();
}
Delay1US3();
SetSCL();
Delay2US5();
if(OpMode == ReadOp)
*Data = (*Data<<1) | GetSDA();
ClrSCL();
Delay1US3();
}
//check ack or send ack
if(OpMode == WriteOp)
SetSDAInput();
else
{
SetSDAOut();
if(RemainByteNum == 1) //send ACK
SetSDA();
else
ClrSDA();
}
Delay1US3();
SetSCL();
if(OpMode == WriteOp)
{
if(GetSDA() != 0x00) //check ACK
{
Delay2US5();ClrSCL();SetSDAOut();Delay1US3();
SendIICStop();
#ifdef Radio_Module_Console_Debug
puts("Send Cmd or Data NoACK!\n");
#endif
return TwiNoAck;
}
}
Delay2US5();
ClrSCL();
}
SetSDAOut();Delay1US3();
SendIICStop();
return OK;
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -