int main() { ADC_Init(); uint16_t delay = 512; DDRB = 0b11111011; DDRC = 0b11011111; DDRD = 0b00000000; for(;;) { ADC_start(5); PORTB = 0xff; PORTC = 0b11011111; PORTD = 0xff; mydelay(1024-delay); PORTB = 0x00; PORTC = 0x00; PORTD = 0x00; mydelay(delay); delay = lookup[ADC_result()/3]; } }
void led_test() { led_init(); while(1){ led_blink(1); mydelay(); led_blink(0); mydelay(); } }
void interface::on_btnIgnGet_clicked() { int i=0,j=0; ui->txtCommData->clear(); for(i=0;i<cdata;i++){ for(j=0;j<cdata;j++){ ui->tblIgn->setCurrentCell(i,j); ui->txtCommData->clear(); data_target=IGNRead_target; QByteArray dataIgn="read_ign"; dataIgn+= " "; dataIgn+= QString::number(i).toUtf8(); dataIgn+= " "; dataIgn+= QString::number(j).toUtf8(); dataIgn+= "\n"; my_port->write(dataIgn); waitComm=1; while(waitComm==1){mydelay(100);} } } QMessageBox::information(this,"Success","Ignition Table loaded Successfully"); }
/***************************************************************** 功能:把配置FPGA用到的5个信号线进行初始化 输入:无 输出:无 返回:无 硬件介绍: GPIO0 FPGA_DIN FPGA 加载 GPIO1 FPGA_DONE GPIO2 FPGA_CLK GPIO3 FPGA_INIT *****************************************************************/ LOCAL VOID InitFpgaPin_ALTERA() { DWORD reg; /*对G4的5个IO脚进行初始化*/ /*把FPGA_DIN和FPGA_CCLK 和FPGA_PROG设置输出*/ BSP_AT91F_OR_PIO_CfgOutput(BSP_PIOB,FPGA_DIN_ALTERA); BSP_AT91F_OR_PIO_CfgOutput(BSP_PIOB,FPGA_CLK_ALTERA); BSP_AT91F_OR_PIO_CfgOutput(BSP_PIOB,FPGA_PROG_ALTERA); BSP_AT91F_OR_PIO_CfgOutput(BSP_PIOC,FPGA_RESET); /*把FPGA_INIT和FPGA_DONE设置输入*/ BSP_AT91F_OR_PIO_CfgOutput(BSP_PIOB,FPGA_BUS_ENABLE); BSP_AT91F_OR_PIO_CfgInput(BSP_PIOB,FPGA_DONE_ALTERA); BSP_AT91F_OR_PIO_CfgInput(BSP_PIOB,FPGA_INIT_ALTERA); /*输出脚初始值置为0*/ /*BSP_AT91F_OR_PIO_SetOutput(BSP_PIOB,FPGA_BUS_ENABLE);*/ BSP_AT91F_OR_PIO_SetOutput(BSP_PIOB,FPGA_PROG_ALTERA); BSP_AT91F_OR_PIO_SetOutput(BSP_PIOC,FPGA_RESET); BSP_AT91F_OR_PIO_ClearOutput(BSP_PIOB,FPGA_DIN_ALTERA); BSP_AT91F_OR_PIO_ClearOutput(BSP_PIOB,FPGA_CLK_ALTERA); mydelay(); }
//外部中断 2 服务程序 KEY3 = PE2 void EXTI2_IRQHandler(void) { mydelay(10); //消抖 if(2==button_read()) { led_on(LED2); //LED2 亮 } EXTI_ClearITPendingBit(EXTI_Line2);//清除 LINE2 上的中断标志位 }
//PIN6外部中断 9_5 服务程序 KEY4 = PD6 void EXTI9_5_IRQHandler(void) { mydelay(10); //消抖 if(1==button_read()) { led_on(LED1); //LED1 亮 } EXTI_ClearITPendingBit(EXTI_Line6); //清除 LINE0 上的中断标志位 }
u8 Spi_Write_Packet(unsigned char *Tx_buffer,unsigned char size,unsigned char id) { u16 send_ok=1;//i, //添加关GDO0中断函数 // RFC1100AON(); //功率开 Spi_Write_Strobe(CC_SFTX); //清缓冲区 Spi_Write_Strobe(CC_SIDLE); //进入空闲 //Spi_Write_Strobe(CC_STX); //进入接收模式 Spi_Write_Byte(CC_TXFIFO,size+1); //先送长度 Spi_Write_Byte(CC_TXFIFO,0x02); Spi_Write_Burst(CC_TXFIFO,Tx_buffer,size); //发送数据 Spi_Write_Strobe(CC_STX); //发送模式 // i = 0; while (GDO0_L) ; //等待送出 #if 0 { if (i > 50000) { send_ok=0; break; //限时等待 } mydelay(1); i++; // } i = 0; #endif while (GDO0_H) ; //送出完毕 #if 0 { if (i > 50000) { send_ok=0; break; //限时等待 } mydelay(1); i++; // } #endif Spi_Write_Strobe(CC_SFTX); //清缓冲区 Spi_Write_Strobe(CC_SIDLE); //进入空闲 Spi_Write_Strobe(CC_SRX); //进入接收模式 // RFC1100AOFF(); return send_ok; }
//外部中断 3 服务程序 KEY2 = PE3 void EXTI3_IRQHandler(void) { mydelay(10); //消抖 if(4==button_read()) { led_on(LED1); //LED1 亮 led_on(LED2); //LED2 亮 } EXTI_ClearITPendingBit(EXTI_Line3); //清除 LINE3 上的中断标志位 }
//外部中断 4 服务程序 KEY1= PE4 void EXTI4_IRQHandler(void) { mydelay(10); //消抖 if(8==button_read()) { led_off(LED1); //LED1 灭 led_off(LED2); //LED2 灭 } EXTI_ClearITPendingBit(EXTI_Line4);//清除 LINE4 上的中断标志位 }
void iDraw() { mydelay(100); iClear(); //check if hit upper wall boxhitball(); if(turn==0 || ballhitbox==0) { if(posy+radius>=win_h) { //change direction of motion dy = -dy; } //now check for hitting lower wall else if(posy-radius<=0) { dy = -dy; } else if(posx+radius>=win_w) { dx = -dx; } else if(posx-radius<=0) { dx = -dx; } posx=posx+dx; posy=posy+dy; } iFilledCircle(posx,posy,radius); iFilledRectangle(boxx,boxy,boxw,boxh); //place your drawing codes here }
void interface::on_btnIgnSet_clicked() { int i=0,j=0; ui->txtCommData->clear(); for(i=0;i<cdata;i++){ for(j=0;j<cdata;j++){ ui->tblIgn->setCurrentCell(i,j); ui->txtCommData->clear(); data_target=no_target; QByteArray dataIgn; dataIgn="save_ign"; dataIgn+= " "; dataIgn+= QString::number(i).toUtf8(); dataIgn+= " "; dataIgn+= QString::number(j).toUtf8(); dataIgn+= " "; dataIgn+= ui->tblIgn->item(i,j)->text().toUtf8(); dataIgn+= "\n"; my_port->write(dataIgn); mydelay(100); } } QMessageBox::information(this,"Success","Ignition Table written Successfully"); }
/***************************************************************** 功能:从CF卡读取FPGA代码,然后加载到FPGA芯片中 输入:无 输出:无 返回:0 成功 其他失败 *****************************************************************/ SDWORD LoadFpga_ALTERA(CHAR filename[4][80],DWORD fileno) { BYTE *data = NULL; DWORD bytes ; BYTE *bootrom_p1 ; FILE *bootrom_fd ; BYTE *pFpgaFile = NULL; BYTE dataTemp; DWORD i = 0; DWORD j = 0; DWORD count = 0 ; DWORD ulFileLength = 0; DWORD tempfileno = 0; InitFpgaPin_ALTERA(); StartDownLoadFpga_ALTERA(); /*检测FPGA_INIT信号,如果变为1 表示已经对FPGA里的memory清除完毕*/ while(0 == GpioValGet_ALTERA(FPGA_INIT_ALTERA)) { taskDelay(2) ; count++ ; if( 10 == count) { printf("\r\n FPGA INIT Signal error !!") ; return (2); } } for(tempfileno=0;tempfileno<fileno;tempfileno++) { pFpgaFile = (BYTE*)malloc(FPGA_FILE_MAX_LENGTH); if(NULL == pFpgaFile) { printf( "\nERROR: NO memory!\n" ) ; return (1); } bootrom_p1 = pFpgaFile ; if((bootrom_fd = fopen( filename[tempfileno], "rb" )) == NULL ) { printf( "\nERROR: can not open file %s\n",filename ) ; free( pFpgaFile ) ; return (1); } bytes = 0 ; printf( "read FPGA file\n" ) ; while( fscanf( bootrom_fd, "%c", &dataTemp ) != EOF ) { *bootrom_p1++ = dataTemp ; bytes = bytes + 1 ; if( bytes >= FPGA_FILE_MAX_LENGTH ) break ; } fclose( bootrom_fd ) ; if( bytes > FPGA_FILE_MAX_LENGTH ) { printf( "ERROR: bootrom file is too long!\n" ) ; return (1); } printf( "File %08x\n" ,bytes) ; ulFileLength=bytes; /*把文件存入到申请的内存块中*/ /*ulFileLength = ftpDownload("nsp2000.bin", pFpgaFile); */ data = pFpgaFile; /* 启始点*/ /*开始加载*/ for(i = 0; i<ulFileLength; i++, data++) { for( j=0; j<8; j++) { /*置FPGA_CLK为0*/ GpioValSet_ALTERA(FPGA_CLK_ALTERA, 0); /*一个字节的最高bit先打入FPGA, 送到DIN脚上,在CLK上升沿打入*/ /*if(((*data) << j) & 0x80 )*/ if(((*data) >> j) & 0x01 ) { GpioValSet_ALTERA(FPGA_DIN_ALTERA, 1); } else { GpioValSet_ALTERA(FPGA_DIN_ALTERA, 0); } mydelay(); /*置FPGA_CLK为1,因为上升沿把DIN 上的电平值打入FPGA,此时打入*/ GpioValSet_ALTERA(FPGA_CLK_ALTERA, 1); mydelay(); } if(0 == GpioValGet_ALTERA(FPGA_INIT_ALTERA)) { free(pFpgaFile); printf("\r\n FPGA_INIT_ALTERA in middle!\n") ; return(3); } } free(pFpgaFile); for(i = 0; i <100; i++) { GpioValSet_ALTERA(FPGA_CLK_ALTERA , 0 ); mydelay(); GpioValSet_ALTERA(FPGA_CLK_ALTERA , 1 ); mydelay(); } }