Esempio n. 1
0
bool CCF79107PJ::instruction1(UINT8 cmd)
{
    if (pPC->fp_log) fprintf(pPC->fp_log,"\nbefore CCF79107[1]=%02x\tpc=%08x\n",cmd,pPC->pCPU->get_PC());
    dumpXYW();

    switch(cmd) {
    case 0x04: Write_Reg(VAR_X); break;
    case 0x05: Write_Reg(VAR_Y); break;
    case 0x08: Exch_Reg(VAR_X); break;
    case 0x0e:
        ////////////////////////////////////////////////////////
        // BUG: UNACCEPTABLE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  //
        if (pPC->pCPU->get_PC()==0xf0004f24) Exch_Reg(VAR_X); // ROM Z-1
        if (pPC->pCPU->get_PC()==0xf0004f66) Exch_Reg(VAR_X); // ROM Z-1GR
        ////////////////////////////////////////////////////////
//          Exch_Reg(VAR_X);
        break;
    case 0x10: memset((char*)&(pPC->mem[VAR_X]),0,0x09); break;     // X <- 0
    case 0x11: memset((char*)&(pPC->mem[VAR_Y]),0,0x09); break;     // Y <- 0
    case 0x80: //  X <-> Y. is reg used ? What is the value of reg after the exchange ?
        for(int i = 0x410; i <= 0x418; i++) {
            quint8 _t = pPC->mem[i-0x10];
            pPC->mem[i-0x10] = pPC->mem[i];
            pPC->mem[i] = _t;
        }
        break;
    default:
        if (pPC->fp_log) fprintf(pPC->fp_log,"UNKNOWN");
    }

    if (pPC->fp_log) fprintf(pPC->fp_log,"after CCF79107[1]=%02x\tpc=%08x\n",cmd,pPC->pCPU->get_PC());
    dumpXYW();

    return true;
}
void ANO_NRF::Check_Event(void)
{
	u8 sta = Read_Reg(NRF_READ_REG + NRFRegSTATUS);
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<RX_DR))//接收中断
	{
		u8 rx_len = Read_Reg(R_RX_PL_WID);
		Read_Buf(RD_RX_PLOAD,NRF24L01_2_RXDATA,rx_len);
		Usart1_Send_Buf(NRF24L01_2_RXDATA,rx_len);
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<TX_DS))
	{
		
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<MAX_RT))
	{
		if(sta & 0x01)	//TX FIFO FULL
		{
			Write_Reg(FLUSH_TX,0xff);
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	Write_Reg(NRF_WRITE_REG + NRFRegSTATUS, sta);//??nrf??????
	sta = Read_Reg(NRF_READ_REG + NRFRegSTATUS);
}
Esempio n. 3
0
u8 ANO_NRF::NRF_Tx_Dat(u8 *txbuf,u8 *AckPacket)
{
	u8 state;  
 
	 /*ce为低,进入待机模式1*/
	CE_L();

	/*写数据到TX BUF 最大 32个字节*/						
   Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);

      /*CE为高,txbuf非空,发送数据包 */   
 	 CE_H();
	  	
	  /*等待发送完成中断 */                            
	while(NRF_Read_IRQ()!=0);

	 state = Read_Reg(NRFRegSTATUS);/*读取状态寄存器的值 */  
	 Write_Reg(NRF_WRITE_REG+NRFRegSTATUS,state); 	
	 
   if(state&RX_DR)
	 {
		 
		 Read_Buf(RD_RX_PLOAD, AckPacket, 32);
	 }
	 Write_Reg(FLUSH_TX,NOP);//清除TX FIFO寄存器 
	 
	 
	return state;   	 


} 
Esempio n. 4
0
void ANO_NRF::Check_Event(void)
{
	u8 sta = Read_Reg(NRF_READ_REG + NRFRegSTATUS);
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<RX_DR))
	{
		u8 rx_len = Read_Reg(R_RX_PL_WID);
		if(rx_len<33)
		{
			Read_Buf(RD_RX_PLOAD,NRF24L01_2_RXDATA,rx_len);// read receive payload from RX_FIFO buffer
			dt.Data_Receive_Anl(NRF24L01_2_RXDATA,rx_len);
		}
		else 
		{
			Write_Reg(FLUSH_RX,0xff);//清空缓冲区
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<TX_DS))
	{
		
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<MAX_RT))
	{
		if(sta & 0x01)	//TX FIFO FULL
		{
			Write_Reg(FLUSH_TX,0xff);
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	Write_Reg(NRF_WRITE_REG + NRFRegSTATUS, sta);
}
Esempio n. 5
0
void Set_Area(u16 x1,u16 y1,u16 x2,u16 y2)//设置显示区域
{
	Write_Reg(0x0200,x1);
	Write_Reg(0x0201,y1);//设置起点坐标
	
	Write_Reg(0x0210,x1);
	Write_Reg(0x0211,x2);//显示区域
	Write_Reg(0x0212,y1);
	Write_Reg(0x0213,y2);
	Write_COM(0x0202);
}
void ANO_NRF::Init(u8 model, u8 ch)
{

	CE_L();
	Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);	//写RX节点地址 
	Write_Buf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); 		//写TX节点地址  
	Write_Reg(NRF_WRITE_REG+EN_AA,0x01); 													//使能通道0的自动应答 
	Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01);											//使能通道0的接收地址 
	Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);											//设置自动重发间隔时间:500us;最大自动重发次数:10次 2M波特率下
	Write_Reg(NRF_WRITE_REG+RF_CH,ch);														//设置RF通道为CHANAL
	Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); 												//设置TX发射参数,0db增益,2Mbps,低噪声增益开启
	//Write_Reg(NRF_WRITE_REG+RF_SETUP,0x07); 												//设置TX发射参数,0db增益,1Mbps,低噪声增益开启
/////////////////////////////////////////////////////////
	if(model==1)				//RX
	{
		Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);								//选择通道0的有效数据宽度 
		Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f);   		 // IRQ收发完成中断开启,16位CRC,主接收
	}
	else if(model==2)		//TX
	{
		Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);								//选择通道0的有效数据宽度 
		Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);   		 // IRQ收发完成中断开启,16位CRC,主发送
	}
	else if(model==3)		//RX2
	{
		Write_Reg(FLUSH_TX,0xff);
		Write_Reg(FLUSH_RX,0xff);
		Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f);   		 // IRQ收发完成中断开启,16位CRC,主接收
		
		RW(0x50);
		RW(0x73);
		Write_Reg(NRF_WRITE_REG+0x1c,0x01);
		Write_Reg(NRF_WRITE_REG+0x1d,0x06);
	}
	else								//TX2
	{
		Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);   		 // IRQ收发完成中断开启,16位CRC,主发送
		Write_Reg(FLUSH_TX,0xff);
		Write_Reg(FLUSH_RX,0xff);
		
		RW(0x50);
		RW(0x73);
		Write_Reg(NRF_WRITE_REG+0x1c,0x01);
		Write_Reg(NRF_WRITE_REG+0x1d,0x06);
	}
	CE_H();
}
Esempio n. 7
0
void LCD_Config()//LCD配置
{
	LCD_Init();
	LCD_Reset();
	CS_0;//CS=0 打开片选
	Write_Reg(0x0000,0x0000);
	Write_Reg(0x0000,0x0000);
	Write_Reg(0x0000,0x0000);
	Write_Reg(0x0000,0x0000);
	DelayM(2);
	Write_DAT(0x0000);
	Write_DAT(0x0000);
	Write_DAT(0x0000);
	Write_DAT(0x0000);
	DelayM(2);
	Write_Reg(0x0008,0x0808);
	Write_Reg(0x0400,0x6200);
	
	Write_Reg(0x0300,0x0c0c);
	Write_Reg(0x0301,0xff13);
	Write_Reg(0x0302,0x0f0f);
	Write_Reg(0x0303,0x150b);
	Write_Reg(0x0304,0x1020);
	Write_Reg(0x0305,0x0a0b);
	Write_Reg(0x0306,0x0003);
	Write_Reg(0x0307,0x0d06);
	Write_Reg(0x0308,0x0504);
	Write_Reg(0x0309,0x1030);
	
	Write_Reg(0x0010,0x001b);
	Write_Reg(0x0011,0x0101);
	Write_Reg(0x0012,0x0000);
	Write_Reg(0x0013,0x0001);

	Write_Reg(0x0100,0x0330);
	Write_Reg(0x0101,0x0247);
	Write_Reg(0x0103,0x1000);
	Write_Reg(0x0280,0xbf00);
	Write_Reg(0x0102,0xd1b0);
	DelayM(5);
	Write_Reg(0x0001,0x0100);
	Write_Reg(0x0002,0x0100);
	Write_Reg(0x0003,0x1030);
	Write_Reg(0x0009,0x0001);
	Write_Reg(0x000c,0x0000);
	Write_Reg(0x0090,0x8000);
	Write_Reg(0x000f,0x0000);
	
	Write_Reg(0x0210,0x0000);
	Write_Reg(0x0211,0x00ef);
	Write_Reg(0x0212,0x0000);
	Write_Reg(0x0213,0x018f);
	
	Write_Reg(0x0500,0x0000);
	Write_Reg(0x0501,0x0000);
	Write_Reg(0x0502,0x005f);
	Write_Reg(0x0401,0x0001);
	Write_Reg(0x0404,0x0000);
	DelayM(2);
	Write_Reg(0x0007,0x0100);
	DelayM(5);
	Write_Reg(0x0200,0x0000);
	Write_Reg(0x0201,0x0000);
	DelayM(2);
	Write_COM(0x0202);
	DelayM(2);
	CS_1;
}