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); }
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; }
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); }
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(); }
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; }