![]() |
|
||||||||||||||
| . ÍøÕ¾Ê×Ò³ . ²úÆ·ÐÂÖª . Òµ½ç×ÊѶ . ¼¼ÊõÎÄ¿â . ÏÂÔØÖÐÐÄ . ·þÎñµ¼º½ . ÓʹºÐèÖª . ¼¼ÊõÂÛ̳ . | ||
|
||
|
||||||||||||||||||||||||||||||
| »ùÓÚNios IIºÍeCosµÄ´®¿ÚͨÐųÌÐò¿ª·¢ | ||||||||||||||||||||||||||||||
×÷ÕߣºFree ÎÄÕÂÀ´Ô´£º±¾Õ¾Ô´´ µã»÷Êý£º ¸üÐÂʱ¼ä£º2008-4-1 ![]() |
||||||||||||||||||||||||||||||
|
ǶÈëʽ¿ª·¢ÈËÔ±±ØÐëÑ¡ÔñÒ»¿î´¦ÀíÆ÷£¬ÒԴ˾ö¶¨ºÏÊʵÄϵͳÐÔÄÜ¡£Nios II´¦ÀíÆ÷ʹÓÃÖ¸ÁîºÍÊý¾Ý´æ´¢Æ÷·ÖÀëµÄ´æ´¢Æ÷½á¹¹£¬¾ßÓÐÁé»îµÄ½á¹¹¿ÉÐÞ¸ÄÐÔ£¬Ö§³Ö×Ô¶¨ÖÆÖ¸Áî¡£Nios II´¦ÀíÆ÷Ö§³ÖƬÉϵ÷ÊÔ£¬Í¨¹ýJTAGµ÷ÊÔͨµÀ£¬¿ÉÒÔʵÏÖÖ¸Áîµ¥²½¡¢¶Ïµã¡¢Á¬ÐøÔËÐеȵ÷ÊÔ¹¦ÄÜ¡£Ê¹ÓÃϵͳ¿ª·¢¹¤¾ß½«´¦ÀíÆ÷¡¢ÍâÉè¡¢´æ´¢Æ÷ºÍI/O½Ó¿Ú¼¯³ÉÔÚµ¥Æ¬FPGAÖУ¬¶¨ÖÆ×Ô¼ºÉè¼ÆµÄϵͳ£¬²¢ÇÒ¶Ô¸÷ÖÖÍâΧÉ豸µÄʵÏÖÌṩÁËÇ¿´óµÄÖ§³Öƽ̨£»SOPC Builderϵͳ¿ª·¢¹¤¾ß¿ÉÒÔ×Ô¶¯Éú³É×é¼þÒÔ¼°Á¬½Ó×é¼þµÄ×ÜÏߣ¬quartus ii Èí¼þ¿ª·¢¹¤¾ß¿ÉÒÔÍê³É¹¦ÄÜÄ£¿éÉè¼Æ¡¢×ۺϲ¼ÏߺͷÂÕæ£¬Nios II ideÈí¼þ¿ª·¢¹¤¾ßÌṩǶÈëʽӦÓÃÈí¼þµÄ¿ª·¢»·¾³ºÍµ÷ÊÔ»·¾³¡£ËùÓÐÈí¼þ¿ª·¢ÈÎÎñ±à¼¡¢¹¹½¨¡¢³ÌÐòµ÷ÊÔ¶¼Äܹ»ÔÚ(IDE)ÏÂÍê³É£¬´Ó¶ø¼ò»¯ÁË¿ª·¢¹ý³Ì£¬½µµÍÁËϵͳ³É±¾¡¢¸´ÔÓÐÔÒÔ¼°¹¦ºÄ£¬Ëõ¶ÌÁ˲úÆ·ÉÏÊÐÖÜÆÚ¡£ ×é¼þµÄ¿É¶¨ÖÆÐÔÊÇǶÈëʽ¿ª·¢µÄÒ»¸öÌØµã£¬SOPC£¨System on Programmable Chip£¬Æ¬ÉϿɱà³Ìϵͳ£©ÊÇAltera¹«Ë¾Ìá³öµÄÒ»ÖÖÁé»î¡¢¸ßЧµÄSOC½â¾ö·½°¸¡£Ëü½«´¦ÀíÆ÷¡¢´æ´¢Æ÷¡¢I/O½Ó¿Ú¡¢DMA¡¢¶¨Ê±Æ÷µÈϵͳÉè¼ÆÐèÒªµÄ¹¦ÄÜÄ£¿é¼¯³Éµ½Ò»¸öPLDÆ÷¼þÉÏ£¬¹¹½¨Ò»¸ö¿É±à³ÌµÄƬÉÏϵͳ¡£ ǶÈëʽӦÓÃÈí¼þ¶¼ÊÇÔËÐÐÔÚÌØ¶¨µÄÓ²¼þƽ̨Éϵġ£ÎÒËùʹÓõÄFPGAΪEP Ó²¼þƽ̨Éè¼Æ ¸ù¾ÝfpgaÐͺźÍflashÀàÐÍÏÈÒªÖÆ×÷Ä¿±ê°å¡£Quartus iiÓÐÒ»¸öÃüÁîmk_target_boardÊÇÓÃÀ´ÖÆ×÷Ä¿±ê°åµÄ£¬²Î¿´¸ÃÃüÁîµÄʹÓðïÖúÇë²Î¿¼Quartus ii°²×°Â·¾¶documentĿ¼ÏµÄflash-program-guide.pdf¡£Éú³ÉÄ¿±ê°å¹¤³Ìºó£¬Æô¶¯quartus ii 5.0ºÍsopc builderÈí¼þÉè¼Æ¸ÃÄ¿±ê°å¹¤³Ì£¬sopc builderÈí¼þÍê³ÉUART¡¢FLASH¡¢RAM×é¼þµÄÌí¼ÓºÍ±àÒë¡£quartus ii 5.0Èí¼þ½øÐÐ×ۺϲ¼Ïߣ¬±àÒëÉú³Éflash program file(Ò»¸ösofÎļþ)¡£ È»ºóʹÓÃquartus ii 5.0ºÍsopc BuilderÈí¼þÉè¼ÆÎÒÃǵÄÓ¦Óù¤³Ì£¬ÔÚsopc builderÈí¼þÖÐÑ¡ÔñÎÒÃÇ×Ô¼ºÉè¼ÆµÄÄ¿±ê°å¡£Ìí¼Ó±ØÐèµÄ×é¼þºÍÄ£¿é£¬´®¿ÚͨÐÅÐèÒªµÄUART×é¼þ£¬±£´æÊý¾ÝµÄFLASH×é¼þµÈ¡£·ÖÅä¹Ü½Å¡¢±àÒ룬Éú³ÉFPGAÓ²¼þÅäÖÃÎļþ£¨Ò²ÊÇsofÎļþ£©¡£Sopc BuilderÉú³ÉµÄptfÎļþÒ²ÊÇÎÒÃÇÔÚºóÃæÅäÖÃecos¿âµÄʱºòÒªÓõ½µÄÎļþ¡£ eCos¿â±àÒë eCos¿ÉÒÔµ½RedhatµÄÍøÕ¾»òÕßNios CommunityÂÛ̳ÕÒµ½£¬NiosÂÛ̳µÄeCosÊÇÒÆÖ²Á˵İ汾£¬¶øredhatÍøÕ¾ÉϵĻ¹Òª×Ô¼ºÒÆÖ²µ½Nios IIÉÏ¡£ÒÆÖ²Á˵İ汾֧³ÖÕâЩAlteraµÄAvalonÉ豸×é¼þ£ºTimer¡¢UART¡¢JTAG UART¡¢Lan Íê³ÉeCosµÄ°²×°ºó£¬¾Í¿ÉÒÔÅäÖÃeCosÁË£¬´ò¿ª¡°¿ªÊ¼¡ª>³ÌÐò¡ª>altera¡ª>niosii development kit¡ª> niosii sdk shell¡±£¬ÔÚniosii sdk shellÖÐÆô¶¯ÅäÖù¤¾ßnios2configtool£¬ÃüÁîÈçÏ£º nios2configtool --ptf=/ecos-c/info_aquire/niosii_c.ptf --cpu=cpu ²ÎÊýniosii_c.ptfÊÇÎÒÃÇÔÚÉè¼ÆÓ¦Óù¤³ÌʱÉú³ÉµÄÎļþ£¬cpuÊÇʹÓÃSopc Builder¶¨ÖƽӿÚʱÌí¼ÓNios II´¦ÀíÆ÷µÄÃû×Ö¡£½Ó×ųöÏÖÈçÏÂͼÐÎÅäÖýçÃæ£º ¸ù¾Ý¾ßÌåµÄUARTоƬÐͺţ¬´ÓpackageĿ¼ѡÔñÏàӦоƬµÄÇý¶¯¼ÓÈ룬Èç¹ûÐèÒªµÄUARTоƬÇý¶¯²»´æÔÚ£¬Ôò¿ÉÒԲο¼ÒÑÓеÄUARTоƬÇý¶¯½øÐÐÐ޸ġ£ ´ò¿ª²Ëµ¥¡°build->package¡±Ìí¼Ó¡°serial device drivers¡±°üºÍ¡°FLASH device drivers¡±°ü£¬°ÑÎÒÃÇÐèÒªµÄ°üÌí¼ÓÍêºó£¬¾Í¿ÉÒÔ±àÒëeCos¿âÁË£¬´ò¿ª²Ëµ¥¡°build->library¡±±àÒëÉú³ÉeCos¿â£¬Ëü°üº¬includeÎļþĿ¼¡¢libÎļþĿ¼ºÍprogram_flashÎļþ¡£È»ºó¿ÉÒÔʹÓÃNios II IDE¼¯³É¿ª·¢¹¤¾ß¿ª·¢»ùÓÚeCosǶÈëʽ²Ù×÷ϵͳµÄ´®¿ÚͨÐųÌÐò¡£ ´®¿ÚͨÐųÌÐò¿ª·¢ºÍµ÷ÊÔ 1£©ÅäÖÿª·¢»·¾³ ´ò¿ªNios II IDEÈí¼þ£¬Ð½¨Ò»¸ö¡°advanced c/c++ project¡±¹¤³Ì£¬Ñ¡ÔñÎÒÃÇ´®¿ÚͨÐųÌÐòËùÔÚµÄÎļþ¼ÐµÄĿ¼·¾¶¡£È»ºóÔÚ¡°build command¡±ÖÐÊäÈëÎÒÃǵ͍ÖƱàÒëÃüÁ make INSTALL_DIR=/ecos-c/info_aquire/vehicle_install Õâ¸öĿ¼/ecos-c/info_aquire/vehicle_installÊÇÎÒÃǵıàÒëÉú³ÉµÄeCos¿âËùÔÚµÄĿ¼£¬²»ÒªºÍ´®¿ÚͨÐųÌÐòËùÔÚµÄĿ¼»ìÏý¡£ 2) ´®¿ÚͨÐųÌÐòÉè¼Æ ³ÌÐò¹¤×÷ÔÀí£º´ÓPC»ú·¢ËÍÒ»ÌõÊ®Áù½øÖƸñʽµÄÊý¾Ý°üµ½´®¿ÚͨѶ³ÌÐò£¬´®¿ÚͨѶ³ÌÐòµÄ¶ÁÊý¾ÝÏß³ÌÊ×ÏȶԽÓÊÕµ½µÄÊý¾Ý½øÐÐÅжϣ¬Èç¹û½ÓÊÕµ½°üÍ·±êÖ¾£¬ÔòÖØÐ¿ªÊ¼Ìî³ä»º³åÇø£¬Èç¹û½ÓÊÕµ½°üβ±êÖ¾£¬Ôò½«»º³åÇøÊý¾Ý´«µÝ¸ø´¦ÀíÊý¾ÝÏ̶߳ÔÊý¾Ý°ü½øÐд¦Àí¡£´¦ÀíÊý¾ÝḬ̈߳´ÕÕ°üµÄÀàÐͱêÖ¾½øÐд¦Àí£¬Èç¹ûÔÚ´¦ÀíµÄ¹ý³ÌÖгöÏÖ´íÎó£¬Ôò°Ñ´íÎóµÄÐÅÏ¢·µ»Ø¸øPC£¬³É¹¦Ö´ÐÐÁËÔò·µ»Ø³É¹¦µÄ¶ÔÓ¦±êÖ¾ÈÃPCÈ·ÈϲÙ×÷Ö´Ðгɹ¦¡£ ͨѶ°üÐÒ飺
3£©³ÌÐòÖ÷Òª´úÂë·ÖÎö ¶¨Òå°üµÄÀàÐÍ£¬PKG_DATEºÍPKG_STATUSÊǽÓÊÕ°üÀàÐÍ£¬ANSWER_OKºÍANSWER_ERRÊÇ·µ»Ø±êÖ¾¡£ ÉùÃ÷Ï̺߳¯ÊýºÍÏ߳̾ä±ú£¬program_recvÊÇÊý¾Ý½ÓÊÕÏ̺߳¯Êý£¬program_dealÊÇ´¦ÀíÊý¾ÝÏ̺߳¯Êý¡£ enum TPKG{PKG_DATE=0x50,PKG_STATUS=0x51 }; enum TANSWER{ANSWER_OK=0,ANSWER_ERR=1}; cyg_thread thread_s[2]; char stack[2][4096]; cyg_handle_t thread_recv,thread_deal; cyg_thread_entry_t program_recv; cyg_thread_entry_t program_deal; ÏÂÃæº¯ÊýÊÇÒ»¸öÇëÇóÓ¦´ðº¯Êý£¬µ±echo_typeÊÇANSWER_OKʱ£¬Ê¹ÏûÏ¢½âÎö³É¹¦£¬ÇÒÃüÁîÖ´ÐУ»µ±echo_typeÊÇANSWER_ERRʱ£¬±íʾ½ÓÊÕÏûÏ¢´íÎó»òÕßÃüÁîûÓгɹ¦Ö´ÐС£ void request_answer(int echo_type,int pkg_type,int err_type,int err_val) { unsigned short ret; const unsigned char *pb; short hi,lo; int nlen; if(echo_type==ANSWER_OK){//³É¹¦·µ»Ø unsigned char chACK[]={ 0xff,0x ret=checkcrc(&chACK[3],1); hi=(ret>>8)&0xff; lo=ret&0xff; chACK[4]=lo; chACK[5]=hi; nlen=sizeof(chACK); cyg_io_write( handle, chACK, &nlen ); } else if(echo_type==ANSWER_ERR) { //ʧ°Ü·µ»Ø unsigned char chNAK[]={0xff,0x ret=checkcrc(&chNAK[3],3); hi=(ret>>8)&0xff; lo=ret&0xff; chNAK[6]=lo; chNAK[7]=hi; nlen=sizeof(chNAK); cyg_io_write(handle, chNAK, &nlen); } } ¶¨ÒåÊý¾Ý½ÓÊÕÏ̺߳ÍÊý¾Ý´¦ÀíỊ̈߳¬½ÓÊÕÏ߳̽ÓÊÕÊý¾Ý£¬½ÓÊÕµ½ÁËÒ»¸öÕû°ü£¬¾Í°ÑÕâ¸ö°ü¿½±´¸øÈ«¾ÖÊý¾Ý»º³åÇø£¬È»ºóÓÉÊý¾Ý´¦ÀíÏ߳̽øÐд¦Àí¡£ ´úÂ룺 cyg_io_handle_t handle ; unsigned char g_package[256];//´«µÝ¸ø´¦ÀíÏ̵߳ÄÈ«¾ÖÊý¾Ý»º³åÇø int g_npkg=0; //»º³åÇøµÄ×Ö·ûÊý static void program_recv( ) { Cyg_ErrNo err; //´ò¿ª´®¿Ú£¬·µ»Ø´®¿ÚµÄ¾ä±ú¸ø²ÎÊýhandle err = cyg_io_lookup("/dev/uart_usb", &handle); unsigned char buff; unsigned char content[256];//ÁÙʱ»º³åÇø int count="0",len; while(1){ len=1; //¶ÁÒ»¸ö×Ö½Ú£¬·Åµ½buffÖÐ err=cyg_io_read(handle,(void*)&buff, &len); if (ENOERR == err) { if(buff==0xff){ count=0; content[count++]=buff; } else content[count++]=buff; if((buff==0x g_npkg=0; //¿½±´Êý¾Ýµ½È«¾ÖÊý¾Ý»º³åÇø while((count--)>0){ g_package[g_npkg]=content[g_npkg]; g_npkg++; } } if(count>=255) { //·ÀÖ¹ÒâÍâ·¢Éú£¬²»ÄÜʹÊý×éÔ½½ç count%=256; } } // end if(ENOERR == err) }//end while(1) } Êý¾Ý´¦ÀíÏ̸߳ºÔð´¦ÀíÒ»¸öÍêÕûµÄÊý¾Ý°ü¡£ static void program_deal(cyg_addrword_t datat) { int delay; while(1){ //È«¾ÖÊý¾Ý»º³åÇøÓÐÊý¾Ý£¬²¢Çҳɹ¦´ò¿ªÁË´®¿ÚÔòÖ´ÐÐÊý¾Ý´¦Àí if(g_npkg&&handle){ //Ê×ÏÈͨ¹ýcheckcrc()½øÐÐcrcµÄУÑé¡£ unsigned short ret="checkcrc"(&g_package[3],g_package[2]); const unsigned char *pb=&g_package[3]+g_package[2]; short hi,lo; int nlen; hi=(ret>>8)&0xff; lo=ret&0xff; //±È½ÏУÑéºóµÄ½á¹û£¬ÕýÈ·Ôò´¦Àí°ü£¬´íÎóÔò·µ»Ø´íÎóÏûÏ¢ if((lo==*pb)&&(hi==*(pb+1))){ //Ö´ÐÐÃüÁîÖ¸¶¨µÄ¶¯×÷¡¡¡ } else{ request_answer(ANSWER_ERR,g_package[1],0,lo); } g_npkg=0;//²»ÒªÍüÁËÇå¿ÕÈ«¾ÖÊý¾Ý»º³åÇø } } } 4£©±àÒë¡¢µ÷ÊÔ¼°ÏÂÔØ ´ò¿ªÈí¼þ¡°Niosii¡±£¬Ð½¨Ò»¸ö¹¤³Ì£¬¾Í¿ÉÒÔ¿ªÊ¼Ð´´úÂëÁË¡£´úÂëдÍêºó£¬Í¨¹ý²Ëµ¥¡°project\build all¡±±àÒ빤³ÌÏîÄ¿£¬±àÒë³É¹¦ºó¿ÉÒÔÆô¶¯Nios iiµÄµ÷ÊÔÆ÷½øÐÐÔÚÏßµ÷ÊÔ£¬ÔÚÐèÒªµ÷ÊÔµÄÐÐÉèÖöϵ㣬ͨ¹ý²Ëµ¥¡±run\debug as\nios ii hardware¡±Æô¶¯µ÷ÊԻỰ¡£µ÷ÊÔÍê³ÉÔò¿ÉÒÔÏÂÔØÓ¦ÓóÌÐòµ½FLASHÖУ¬ÐèÒª´ò¿ªNios II SDK SHELL£¬½øÈëµ½ÎÒÃǵÄÓ¦ÓóÌÐòĿ¼£¬ÊäÈëÈçÏÂÃüÁ /my-ecos-lib-path/program-flash application Õâ¸ömy-ecos-lib-path¾ÍÊÇÎÒÃDZàÒëµÄeCos¿âµÄ·¾¶£¬applicationÊÇÎÒÃǵÄNios ii±àÒëºÍµ÷ÊԺõÄÓ¦ÓóÌÐò¡£ ±¾ÎÄÊÇÎÒÔÚʵ¼ÊÏîÄ¿¿ª·¢ÖеľÑé×ܽᣬϣÍû¶Ô´ÓÊÂǶÈëʽ¿ª·¢µÄÅóÓÑÓÐËù°ïÖú£¬ÌرðÊÇʹÓÃNios II´¦ÀíÆ÷¿ª·¢µÄÅóÓÑ¡£ Ïà¹Ø×ÊÁÏ£º NiosII´¦ÀíÆ÷ÊÇAltera¹«Ë¾ÎªÆäFPGA²úÆ·ÅäÌ׿ª·¢µÄÈíºËCPU£¬ËüÃÇÊÇÔÚFPGAÉÏͨ¹ý±à³ÌµÄ·½Ê½ÊµÏֵģ¬×÷Ϊһ¸ö×é¼þ¿ÉÒÔºÍÆäËüµÄ²¿¼þ×éºÏÔÚÒ»Æð,ÔÚµ¥Æ¬FPGAÉϾͿÉÒÔ²¼ÖÃÒ»¸öº | ||||||||||||||||||||||||||||||