⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radiomodulehwdrv.c

📁 SI47**系列DSP的收音芯片驱动C源代码
💻 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 + -