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

📄 bt_arm.c

📁 ARM7的通过蓝牙发送处理过压力信号显示。上位机上通过串口显示
💻 C
📖 第 1 页 / 共 3 页
字号:
        /* case HCI_Inquiry_Result_Event:
                  BTCOM_GetByte(&tbyte);//number response
                 // num_resp=tbyte;//更改
                  
             // for(i=0;i<num_resp;i++)
             // { 
                BTCOM_GetByte(&tbyte);
                inquiry_result.bd_addr.BD_ADDR[0]=tbyte;
                BTCOM_GetByte(&tbyte);
                inquiry_result.bd_addr.BD_ADDR[1]=tbyte;
                BTCOM_GetByte(&tbyte);
                inquiry_result.bd_addr.BD_ADDR[2]=tbyte;
                BTCOM_GetByte(&tbyte);
                inquiry_result.bd_addr.BD_ADDR[3]=tbyte;
                BTCOM_GetByte(&tbyte);
                inquiry_result.bd_addr.BD_ADDR[4]=tbyte;
                BTCOM_GetByte(&tbyte);
                inquiry_result.bd_addr.BD_ADDR[5]=tbyte;
              // }  // BTCOM_GetByte(&tbyte);
                 // inquiry_result.bd_addr.BD_ADDR[6]=tbyte;
             // for(i=0;i<num_resp;i++)
             // {    
                	BTCOM_GetByte(&tbyte);
                	BTCOM_GetByte(&tbyte);
                	BTCOM_GetByte(&tbyte);
                	BTCOM_GetByte(&tbyte);
                	BTCOM_GetByte(&tbyte);
                	BTCOM_GetByte(&tbyte);
				                  
             //  }
             //  for(i=0;i<num_resp;i++) 
             //  {  
               		BTCOM_GetByte(&tbyte);
                	inquiry_result.clock_offset[0]=tbyte;
                	BTCOM_GetByte(&tbyte);
                	inquiry_result.clock_offset[1]=tbyte;
				//}

             break;*/
             
         /* case HCI_Number_Of_Completed_Packets_Event:
                BTCOM_GetByte(&tbyte);//number of Connection Handles;默认为一
                  
                BTCOM_GetByte(&tbyte);//Get Connection Handle
                data_packet.handle[0]=tbyte;
                BTCOM_GetByte(&tbyte);
                data_packet.handle[1]=tbyte;
                  
                BTCOM_GetByte(&tbyte);//HCI_Num_Of_Completed_Packets
                BTCOM_GetByte(&tbyte);

             break;*/
             
         default:
                for(i=0;i<eventlength;i++)
                BTCOM_GetByte(&tbyte);
         break;

      }

   return 1;
}

/****************************************************************************
* 名称:HC595_SendDat()
* 功能:向74HC595发送一字节数据
* 入口参数:dat		要发送的数据
* 出口参数:无
* 说明:发送数据时,高位先发送。
****************************************************************************/
/*void  HC595_SendDat(uint8 dat)
{  
	uint8  i;

   	IO0CLR = SPI_CS;			    		// SPI_CS = 0
   	
   	for(i=0; i<8; i++)					// 发送8位数据
   	{  
   		IO0CLR = SPI_CLK;					// SPI_CLK = 0
      	/* 设置SPI_DATA输出值 *//*
      	if( (dat&0x80)!=0 ) IO0SET = SPI_DATA;
        else IO0CLR = SPI_DATA;
      	dat <<= 1;
      	IO0SET = SPI_CLK;					// SPI_CLK = 1
   	}
   
   IO0SET = SPI_CS;			    		// SPI_CS = 1,输出显示数据
}*/
                        
/*************************************************************************/
/* 数码管显示字模表(0-F)                                                 */
/*************************************************************************/
const uint8  DISP_TAB[16] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 
                              0x88,0x83,0xC6,0xA1,0x86,0x8E };
                              
                              
/****************************************************************************
* 名称:main()
* 功能:初始化串口,并等待接收到串口数据。
* 说明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。
****************************************************************************/
int  main(void)
{  
	uint8     rcv_counter;
   	UARTMODE  UART0_set;
   	
		  
    //PINSEL0 = 0x00005500;    
   	PINSEL0 = 0x00005505;                // 设置I/O连接到UART0
   	PINSEL1 = 0x20000000;
   	//PINSEL1 = 0x00000000;                
   	//IO0DIR = SPI_IOCON|LEDCON|MAX1463_CS;  // 设置LED1控制口为输出,其它I/O为输入
   	//IO0DIR = LED1CON|LED4CON|MAX1463_CS;
   	IO0DIR = LEDCON|MAX1463_CS;//|BT_Reset
   	rcv_new = 0;
   
   
   	UART0_set.datab = 8;                 // 8位数据位
   	UART0_set.stopb = 1;                 // 1位停止位
   	UART0_set.parity = 0;                // 无奇偶校验
   	UART0_Ini(115200, UART0_set);        // 初始化串口模式
   	/*使能UART0接收中断*/   
   	U0FCR = 0x01;                        // 使能FIFO,并设置触发点为8字节
   	U0IER = 0x01;                        // 允许RBR中断,即接收中断
/***************************************************************************
*UART0中断控制设置
****************************************************************************/   
   	/* 设置中断允许 */
   	VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
   	VICVectCntl0 = 0x26;                 // UART0中断通道分配到IRQ slot 0,即优先级最高
   	VICVectAddr0 = (int)IRQ_UART0;       // 设置UART0向量地址
   	VICIntEnable = 0x00000040;           // 使能UART0中断
/***************************************************************************
*EINT3中断控制设置
****************************************************************************/
	EXTMODE = 0x08;					// 设置EINT3中断为边沿触发模式
   	EXTPOLAR = 0x00;				// 设置EINT3中断为下降沿触发
   
   	/*  打开EINT0中断(设置向量控制器,即使用向量IRQ) */
   	
   	VICVectCntl1 = 0x20|17;			// 分配EINT3中断到向量中断1
   	VICVectAddr1 = (int)IRQ_Eint3; 	// 设置中断服务程序地址
   	EXTINT = 0x08;					// 清除EINT3中断标志	
   
   	VICIntEnable = (1<<17);	// 使能EINT3中断(1<<14)|
   
/****************************************************************************
* 
*封装自己的程序
*
*****************************************************************************/  
  	//IO0SET=BT_Reset;
  	//DelayNS(1);
  	//IO0CLR=BT_Reset;
  	
   	rcv_counter = 0;
   	
   	BTCOM_InitBuffer();
   
   //	HC595_SendDat(DISP_TAB[0]);
   
   	ProcessCommadEvent(); 
	  
   	if (Rst_F==1)
     {
      	IO0CLR = LEDCON;
     	DelayNS(100);
     	IO0SET = LEDCON;
     	DelayNS(100);
     }
		   
   	if (EvtFil_F==1)
    {
      	IO0CLR = LEDCON;
     	DelayNS(100);
     	IO0SET = LEDCON;
     	DelayNS(100);
    }
     
   	if (WPgScan_F==1)
    {
      	IO0CLR = LEDCON;
     	DelayNS(100);
     	IO0SET = LEDCON;
     	DelayNS(100);
    }
     
   	if (WInqScan_F==1)
    {
      	IO0CLR = LEDCON;
     	DelayNS(100);
     	IO0SET = LEDCON;
     	DelayNS(100);
    }
     	
   	if (WScanEn_F==1)
    {
      	IO0CLR = LEDCON;
     	DelayNS(100);
     	IO0SET = LEDCON;
     	DelayNS(100);
    }
     
   	HCI_WaitConnection();
   
   	if(ConCplt_F==1)
   	{
   		IO0CLR = LEDCON;
     	DelayNS(100);
     	IO0SET = LEDCON;
     	DelayNS(100);
    }
     
   	//Transfer_data();
   	
   	//ProcessData();
   	//ProcessData();
   	//SendACLData();
    //IO0CLR = MAX1463_CS;
     	 
      //IO0CLR=LEDCON;
   // DelayNS(100);
   // IO0SET = MAX1463_CS;
    //IO0SET = LEDCON;
    //DelayNS(100);
    
	MSpiIni();
	InitADCDataBuf();
	
	//Reset1463();
	Start1463();
	 
   	while(1)                             // 等待中断
  		
   	{   
     	if(ConnectionState==DISCONNECTED)
     		HCI_WaitConnection();
     	
     	if(SysState!=SAMP_PAUSE)
     	{
     		if(Pause1463==1)
     		{	
     			Pause1463=0;
     			//HCI_Exit_Sniff_Mode();
     			
     			Start1463();
     		}
     		if(1==Adc_OK)
   			{
   			
   				Adc_OK=0;
				Halt1463();
				//Test1463();
				//ReadADCtoBuf();//
				ReadRAWtoBuf();
				
				if(Ln_OneTemp==0)
				{
					ReadTemp();
				}
				
				Ln_OneTemp++;
				if(Ln_OneTemp==TLOOP)
					Ln_OneTemp=0;
					
        		Start1463();
       	 	}
        
        	if(ADCDataBuf.cnt>=4)
        	{
        		GetData();
        		SendADCData();
        		
        		if(ReadT==1)
        		{
        			SendTData();
        			ReadT=0;
        		}
        	}
        }
        	
     	else
     	{
     		Halt1463();
     		Pause1463=1;
     		//HCI_SniffMode();
     		ARM_idleMode();
     	} 
     	///////////////////// 
     	//IO0CLR=LEDCON;
     	//DelayNS(300);
     	//IO0SET = LEDCON;
     	//DelayNS(300);
     	
     	//BTCOM_GetByte(&tbyte);
   		 	//BTCOM_GetByte(&tbyte);
    	//eventcode=tbyte;
    	//BTCOM_GetByte(&tbyte);
    	//eventlength=tbyte;
	
     	//IO0CLR=LEDCON;
     	//DelayNS(100);
     	//IO0SET = LEDCON;
     	//DelayNS(100);
     	
     	//HCI_BTReset();
     	//ISendBuf();
     	//SendByte(0X36);
     	if(BTRxBuf.cnt>4)
     		GetPacket();
     	if(HostCommandState==SAMP_PAUSE)
			SysState=SAMP_PAUSE;
		if(HostCommandState==SAMP_RESUME)
			SysState=SAMP_RESUME;
		
     	
     	//data_packet;                     // 将接收到的数据发送回主机
        //rcv_counter++;					// 接收计数值加一
        //HC595_SendDat(DISP_TAB[rcv_counter&0x0f]);
        
        rcv_new = 0;  
   	}
   	
  return(0);
}

/****************************************************************************
*convert 完成8位数据高低位的变换。即a8a7a6a5a4a3a2a1->a1a2a3a4a5a6a7a8
*1463 DI LSB 先发,DO MSB先发。ARM设定为LSB先发。故需转换一下
*****************************************************************************/
uint8 convert(uint8 ch)
{
	uint8 a=0;
	uint8 i;
	
	for(i=0;i<7;i++)
	{
		a=a+(ch&0x01);
		ch=ch>>1;
		a=a<<1;
	}
	a=a+(ch&0x01);

	return(a);
	
}
/****************************************************************************
* 名称:MSpiIni()
* 功能:初始化SPI接口,设置为主机。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  MSpiIni(void)
{  
	S0PCCR = 0xE8;			// 设置SPI时钟分频
   	S0PCR = 0x20;		    // 设置SPI接口模式,MSTR=1,CPOL=1,CPHA=0,LSBF=0
}

/****************************************************************************
* 名称:SPISend()
* 功能:向SPI总线发送数据。
* 入口参数:data        待发送的数据
* 出口参数:返回值为读取的数据
****************************************************************************/
uint8  SPISend(uint8 data)
{  
	uint8 SPIData;
	 
	SPIData=convert(data);
	
	IO0CLR = MAX1463_CS;			    // 片选
   
   	S0PDR = SPIData;
	while( 0==(S0PSR&0x80) );		// 等待SPIF置位,即等待数据发送完毕
   
   	IO0SET = MAX1463_CS;
   	return(S0PDR);
}

/***************************************************************************
*
****************************************************************************/
uint8 ReadDHR(void)
{
	IO0CLR = MAX1463_CS;
	
	                                               
	S0PDR=0x20;
	while( 0==(S0PSR&0x80) );
	highbyte=S0PDR;
	
	S0PDR=0xA0;
	while( 0==(S0PSR&0x80) );
	lowbyte=S0PDR;
	
	PValue=highbyte<<8;
	
	PValue=PValue+lowbyte;
	
	
	IO0SET = MAX1463_CS;
	return(0);
}


/**************************************************************************
*
***************************************************************************/
void Halt1463(void)
{
	SPISend(0x78);
}

void Reset1463(void)
{
	SPISend(0xB8);
}

void Test1463(void)
{
	SPISend(0x13);
	SPISend(0x22);
	SPISend(0x31);
	SPISend(0x40);
	
	SPISend(0x19);
	
	ReadDHR();
}

void Start1463(void)
{
	SPISend(0x88);
}

/***************************************************************************
*
****************************************************************************/
void rwcode(uint16 sdata,uint16 saddr,uint8 smode)
{

 	uint16 a,rmessage[3];
 	uint8 scode[3][6],d1,d2,i,j;

 	rmessage[0]=sdata;
 	rmessage[1]=saddr;
 
 	if(smode==READ) rmessage[2]=0xC000;  //1:read将要读取的值写入PD
 	else rmessage[2]=0x8000;             //0:write

 	for(i=smode;i<=2;i++)
 	{
  		a=rmessage[i];
  		d1=(char)((a&0xFF00)>>8);
  		d2=(char)(a);

  		scode[i][0]=(d1&0xF0)+3;
  		scode[i][1]=((d1&0x0F)<<4)+2;
  		scode[i][2]=(d2&0xF0)+1;
  		scode[i][3]=((d2&0x0F)<<4)+0;

  		if(i==0)scode[i][4]=0xD4;
  		if(i==1)scode[i][4]=0xE4;
  		if(i==2)scode[i][4]=0xF4;

  		scode[i][5]=0x08;

  		for(j=0;j<=5;j++)
  		{
  			SPISend(scode[i][j]);
  		}
   	}
}

/****************************************************************************
*读1463寄存器模块  saddr:模块寄存器地址
*****************************************************************************/
void readmodreg(uint16 saddr,uint16 *RegValue)
{
 	
 	uint16 sd,sa,sm;
 	
 	sd=0;sa=saddr;sm=READ;

 	rwcode(sd,sa,sm);

 	SPISend(0xD4);
 	
 	SPISend(0x28);
 	
 	SPISend(0x19);
 	
 	ReadDHR();
 	
 	*RegValue=PValue;
}

void ARM_idleMode(void)
{
	PCON=0x01;
}

void readport(uint8 portnum)
{
	uint8 wtnum;
	
	wtnum=(portnum<<4)+4;
	
	SPISend(wtnum);
	SPISend(0x28);
	
	SPISend(0x19);
	
	ReadDHR();
	
}

⌨️ 快捷键说明

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