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

📄 6301.c

📁 基于ST ARM处理器的USB通信的演示
💻 C
字号:
/******************** (C) COPYRIGHT 2003 SHHIC ********************
* File Name          : 6301.h
* Author             : wuyuhuai
* Date First Issued  : 05/29/2007
* Description        : This file contains all the functions prototypes for the
*                      TIM software library.
* History:
*  29/05/2007 : V1.0
p1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7   P1.8         P1.9    P1.10  P1.11 P1.12 P1.13 P1.14 P1.15
   |    |    |    |    |    |    |    |    |           |        |
  D0    D1   D2   D3   D4   D5   D6   D7   DATA_CLK    EN2      EN

===============================================================================*/
#include "6301.h"
#include "71x_lib.h"

/*
 =======================================================================================================================
 =======================================================================================================================
 */

void DelayMs(unsigned int n_ms)
{
    u16 i,j;
    for(j=1;j<=n_ms;j++)
      for(i=0;i<2275; i++);
}
// 1.2ms delay





//***** P1.[0:11] out_PP  Init [P1.10:EN]=1
void InitIO(void)
{

}

static void Delay10Us(void)
{
   for(int i = 0; i<19; i++);
}

static void DelayUs(int timervalue)
{
    int i,j;
     for(j=0;j<timervalue;j++)
       for(i = 0; i <2; i++);
}



// ***** get data from TRF7963
char Data_Input()
{
       u8 Read_data;
       CMOS_INPUT;
       Read_data =GPIO_ByteRead(GPIO1,GPIO_LSB);
       Delay10Us();
       return Read_data;
}


// ***** paralell out put data to TRF7963 P1.[0:7]
char Data_Output(char data)
{
	PP_OUTPUT;
        GPIO_ByteWrite(GPIO1,GPIO_LSB,data);
        Delay10Us();
	return data;
}

// ****  Init [P1.8:DATA_CLK]=0
void CLK_Low(void)
{
	GPIO_BitWrite(GPIO1,8,0x00);// Init [P1.8:DATA_CLK]=0
	Delay10Us();
        Delay10Us();
}

// **** Init [P1.8:DATA_CLK]=1
void CLK_High(void)
{
	GPIO_BitWrite(GPIO1,8,0x01);// Init [P1.8:DATA_CLK]=1
	Delay10Us();
}

// **** 在CLK高电平时 P1.[0:7] 上升沿
// a1 d1 a2 d2 start
void Start_Condition(void)
{
	// start condition
	CLK_High();
	Data_Output(0x00);
	Data_Output(0xFF);
	CLK_Low();
}

// **** 在CLK高电平时 P1.[0:7] 下降沿
// a1 d1 a2 d2 stop
void Stop_Condition(void)
{
	// stop condition
	CLK_High();
	Data_Output(0xFF);	
	Data_Output(0x00);
	CLK_Low();
}

// a1 d1 d2 d3 d4 stop
void Stop_Continue(void)
{
	// stop continue condition
	CLK_Low();
	Data_Output(0x00);
	Data_Output(0xFF);
	Data_Output(0x00);
}


//***** MCU send cmd to TRF7963
void TRF7963_cmd(char cCmd)
{
	// start condition
	Start_Condition();
        // send cmd
	Data_Output(cCmd|TRF7963_CMD);  // 置 bit7=1
	CLK_High();
	CLK_Low();
	// stop condition
	Stop_Condition();
}

//**** MCU continous read
int TRF7963_gets(char cAddr, char *cData, int length)
{
	int i;
        // start continue condition
	Start_Condition();

	// send addr
	Data_Output(cAddr | TRF7963_READ | TRF7963_CON_MODE); // 置 bit6=1 bit5=1
	CLK_High();
	CLK_Low();

	// get data
	for (i=0; i<length; i++)
	{
		CLK_High();
		cData[i] = Data_Input();
		CLK_Low();
	}
        // stop continue condition
	Stop_Continue();

	return i;
}

//***** MCU single send cAddr+ cData
//put cmd to TRF7963
//chip status control register

void TRF7963_putc(char cAddr, char cData)
{
	// start condition
	Start_Condition();
        CLK_Low();
	// addr
	Data_Output(cAddr); // 在数据传输时 CLK产生一个下降沿
	CLK_High();
	CLK_Low();

	// put data
	Data_Output(cData);
	CLK_High();
	CLK_Low();
	// stop condition
	Stop_Condition();
}



//**** MCU continous write
// cFIFO_start means the address of cData, or else 0
// 地址含在cData内
int TRF7963_puts(char *cData, int length, char cFIFO_start, char bDelay)
{
	int i;
       // start continue condition
	Start_Condition();
	
	for (i=0; i<length; i++)
	{
	   Data_Output(cData[i]);
           CLK_High();
	   CLK_Low();
	}

	// stop continue condition
	/*if(bDelay)
	{
	  DelayMs(20);
	}*/
	Stop_Continue();

	return i;
}


void InitTRF7963(void)
{
  //EN         |---
  //         __|
  //EN2         |---
  //         ___|
  //DATA-CLK
  //         --------
        // EN high
        //GPIO_BitWrite(GPIO1,10,0x01); // Init [P1.10:EN]=1
	
	// EN2 high
       // GPIO_BitWrite(GPIO1,9,0x01); // Init [P1.9:EN2]=1
	
	// DATA_CLK output
        GPIO_BitWrite(GPIO1,8,0x00); // Init [P1.8:DATA_CLK]=0
	//Data_Input();	
	TRF7963_cmd(0x03);// TRF7963 soft init command Table 5-30

	TRF7963_putc(0, 0x21);	//RF output active,Receiver enable
                                //RF driver at 4 W
                                //AGC off
                                //RF output active

        TRF7963_putc(1, 0x0C);	//ISO14443B bit rate 106 kbps

        TRF7963_putc(9, 0x16);  //ASK 8.5%
                                //SYS_CLK 3.3MHz
}

// MCU single read from cAddr reg
// get data from TRF7963
char TRF7963_getc(char cAddr)
{
	char cTmp;
	// start condition
	Start_Condition();
	// addr
	Data_Output(cAddr|TRF7963_READ);
	CLK_High();
	CLK_Low();
	
	// get data
	CLK_High();
        cTmp = Data_Input();
	CLK_Low();
	
        // stop condition
	Stop_Condition();
	return cTmp;
}


/*TRF7963 function*/
//Get DATA FROM FIFO
int GetFIFOData(char *cBuf)
{
	char cTmp, length;
	length = 0;
        // Read FIFO status register to determine number of bytes in FIFO
        cTmp = TRF7963_getc(0x1C);	

	if(cTmp & 0x10)  //FIFO overflow
	{
	   return -1;
	}	

	cTmp &= 0x0F;  //how many bytes in the FIFO CTmp+1=num
	
        // Read data from FIFO
	if (cTmp)
	{
		TRF7963_gets(0x1F, cBuf+length, cTmp+1);
		length += cTmp+1;
	}

        TRF7963_cmd(0x0F); //reset FIFO content and FIFO status register


        // Any broken bytes in FIFO
        cTmp = TRF7963_getc(0x1C);  //再次读 FIFO status register
	cTmp &= 0x0F;		
	if (cTmp)
	{
		TRF7963_gets(0x1F, cBuf+length, cTmp+1);
		length += cTmp+1;
	}

	// reset FIFO
	TRF7963_cmd(0x0F);
	
	return length;
}


//TIM2 上升沿外部捕获 中断
void Init_IRQ(void)
{
   EIC_IRQChannelConfig(T2TIMI_IRQChannel, ENABLE); //debug
   EIC_IRQChannelPriorityConfig(T2TIMI_IRQChannel, 1); //debug
   TIM_ICAPModeConfig(TIM2,TIM_CHANNEL_A,TIM_RISING);
   TIM_ITConfig(TIM2,TIM_ICA_IT,ENABLE);
}

//****** Set P1.14 for interrupt
void Set_XTI(void)
{
    GPIO_Config(GPIO1, 0x4000, GPIO_IN_TRI_TTL);    // Set P1.14 for interrupt

    XTI_Init();                                        // Initialize the XTI
    XTI_LineModeConfig(XTI_Line8, XTI_RisingEdge);    // Set Line 8 edge
    XTI_LineConfig(XTI_Line8, ENABLE);                // Enable the External interrupts on line 8
    XTI_ModeConfig(XTI_Interrupt, ENABLE);

    EIC_IRQChannelPriorityConfig(XTI_IRQChannel,3);    // Set the XTI IRQ Channel priority to 3
    EIC_IRQChannelConfig(XTI_IRQChannel,ENABLE);    // Enable XTI IRQ Interrupts
    EIC_IRQConfig( ENABLE );                        // Enable interrupts

}

//***** 在 void XTI_IRQHandler(void) 对 IRQ_Status 赋值
int WaitforSignal(char cMask, int ms)
{
	int i=0;
        u8 Data_Length[3];
	while (1)
	{
		if (IRQ_Status&cMask)
		{	
                        Data_Length[0]=IRQ_Status;
			IRQ_Status = 0;
                        Data_Length[1]=IRQ_Status;
			return 0;
		}
		else if (IRQ_Status)
		{		
                        Data_Length[2]=IRQ_Status;
			i = IRQ_Status;
			IRQ_Status = 0;
			return i;
		}
		else if (i++ == ms)
		{
			break;
		}

		DelayMs(1);		
	}

	return -1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -