亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bfspiboot.c

?? 在linux平臺上通過spi引導bf533 dsp的應用程序代碼
?? C
字號:
/**********************************************************************/
/* FILE     : bfspiboot.c                                             */
/* FUNCTION : use spi interface send BF53x boot code to bf53x DSP     */
/* AUTOR    : zhang yi feng                                           */
/* COM      : VCOM                                                    */
/* DATE     : 20060517                                                */
/**********************************************************************/
/*
Ver0.01     : 20060605    add dsp busy pin test function
Ver0.02     : 20060612    通過SCP口發送BF533引導程序工作正常
*/

#include<unistd.h>
#include <stdio.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <sys/mman.h>
#include <time.h>

#include "bfspiboot.h"
#include "scp_inf.h"

#define  DEBUG

#ifdef DEBUG
    #define DBG(fmt, args...) printf(fmt,## args)
#else
    #define DBG(fmt, args...)
#endif

SCP_RW_STRUCT                 scp_rw;
u64                           cdm;
GPIO_REGISTER  *gpio_base;
int fd;
struct tm *tnow;
time_t now;
u32 ErroRebootCount;
#define SCP_WORK_MODE_CODE 0x55
#define SCP_WORK_MODE_DATA 0xAA


int main(int argc, char **argv){

    u32  dev; 
    u8*  buf;
    u8*  rxbuf;
    u32  i,flag;
    u32  Length,Count,ptr;
    u8   ch;
    if(argc <= 1) {
        printf("\r\nplease input boot file name.\r\n");
        exit(0);
    }

    dev = open(argv[1],O_RDONLY);
    if(dev == -1){ 
         printf("Cann't open file \n"); 
         exit(0); 
    }
    
    lseek(dev,0,SEEK_SET);
    Length = lseek(dev,0,SEEK_END);
    lseek(dev,0,SEEK_SET);
    buf = (u8*)malloc(Length);
    rxbuf = (u8*)malloc(256);
    memset(buf,0,Length);
    memset(rxbuf,0,256);
    if(buf == NULL){
        DBG("can't malloc memory.\r\n");
        exit(0);
    }
    printf("\r\nAll file  is %dbyte,%dkb\r\n",Length,Length/1024);
    Length = read(dev,buf,Length); 
    close(dev);

    //-----------------------------------------------------------------------
    //rw the scp use buf data
    ErroRebootCount = 0;
    repeat:
    dev = open(scp_dev_name,O_RDWR);
    if(dev == -1){
         printf("Cann't get scp handler.\n");
         exit(0);
    }else{
    }
    
    cdm = 0;
    ioctl(dev,IOCTL_SCP_SET_CLK_INV,&cdm);
    cdm = 0;
    ioctl(dev,IOCTL_SCP_SET_REV_DATA,&cdm);
    cdm = 0;
    if(ioctl(dev,IOCTL_SCP_SET_CDM,&cdm)<0){
         printf("set cdm is error\n");
         close(dev);
         return 0;
    } 
    cdm = SCP_WORK_MODE_CODE;
    ioctl(dev,IOCTL_SET_WORK_MODE,&cdm);
    //cdm = 0;
    //ioctl(dev,IOCTL_SET_CODE_COUNT,&cdm);
    
    OpenDspBusyIo();
    SetDspnRst(0);
    usleep(1000);
    SetDspnRst(1);
    usleep(1000);
    
    printf("start boot\r\n");
    ptr = 0;
    while(1){
     
         if(ptr >= Length) {
             break;
         }
         if((Length-ptr)>=2048)  
              Count = 2048;
         else
              Count = Length-ptr;
         
         scp_rw.write_ptr = buf + ptr;
         scp_rw.count     = Count;       
         scp_rw.read_ptr  = rxbuf;     
         if(ioctl(dev,IOCTL_SCP_RW,&scp_rw) != 0){
              printf("write data to scp is error\n");
              /*ErroRebootCount += 1;
              if(ErroRebootCount<=3){
                   close(dev);
                   goto repeat;
              }*/
              break;
              ;	
         }
         ptr += Count;
         
    }
    //cdm = SCP_WORK_MODE_DATA;
    //ioctl(dev,IOCTL_SET_WORK_MODE,&cdm);
    
    CloseDspBusyIo();
    close(dev); 
    //-----------------------------------------------------------------
    free(buf);
    free(rxbuf);
    return 0; 
} 

/**********************************************************************/
/* NAME     : OpenDspBusyIo                                           */
/* FUNCTION : open dsp busy pin in user level  and initialize GPIO31  */
/* PARAMETER: no                                                      */                                      
/**********************************************************************/
void OpenDspBusyIo(void){
    char dev_name[]="/dev/mem";
    //printf("OpenDspBusyIo  ");   
    fd = open(dev_name,O_RDWR);
    if(fd<0){
         printf("open %s is error\n",dev_name);
         return;
    }
    //printf("...success\r\n");    
gpio_base = (GPIO_REGISTER *)mmap( 0, 0x32, PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0x40060000 );
    if(gpio_base == NULL){
         printf("gpio base mmap is error\n");
         close(fd);
         return;
    }

    /*
    gpio_base->tc  = (gpio_base->tc  & 0xfffffffe);             //set GPIO31 as input
    gpio_base->osl = (gpio_base->osl & 0xfffffffc);             //set GPIO31 was control by GPIO
    gpio_base->tsl = (gpio_base->tsl & 0xfffffffc);             //set GPTC as GPIO out enable
    */

    gpio_base->or  = (gpio_base->or  |  (0x80000000 >> 18)); //set GPIO18 as output
    gpio_base->tc  = (gpio_base->tc  |  (0x80000000 >> 18));  //set GPIO18 as output
    gpio_base->osl = gpio_base->osl & 0xf3ffffff;            //set GPIO18 was control by GPIO
    gpio_base->tsl = gpio_base->tsl & 0xf3ffffff;            //set GPTC18 as GPIO out enable
    gpio_base->od  = (gpio_base->od  |  (0x80000000 >> 18)); //GPIO Open Drain Register (GPOD)

    return;
}

/**********************************************************************/
/* NAME     : CloseDspBusyIo                                          */
/* FUNCTION : release resource                                        */
/* PARAMETER: no                                                      */
/**********************************************************************/
void CloseDspBusyIo(void){
    munmap(gpio_base,0x32);
    close(fd);
}

/**********************************************************************/
/* NAME     : GetDspBusyStatus                                        */
/* FUNCTION : get dsp busy pin current status(low or height)          */
/* PARAMETER:                                                         */
/*            out: if dsp busy pin height return 1 else return 0      */
/**********************************************************************/
u32 GetDspBusyStatus(void){
    u32 gpi;
    gpi = gpio_base->ir;
    //printf("GPIO = %08x\r\n",gpi);
    return (gpi&0x01);
}
/**********************************************************************/
/* NAME     : SetDspnRst                                              */
/* FUNCTION : use ppc405's gpio18  set dsp nRST                       */
/* PARAMETER:                                                         */
/*            in: cs will be set level                                */
/**********************************************************************/
void SetDspnRst(u32 nRST){
    if(nRST){
        gpio_base->or = gpio_base->or | (0x80000000 >> 18);
    }
    else{
        gpio_base->or = gpio_base->or & (~(0x80000000 >> 18));
    }
}
/**********************************************************************/
/* NAME     : SetDspnRst                                              */
/* FUNCTION : use ppc405's gpio18  set dsp nRST                       */
/* PARAMETER:                                                         */
/*            in: cs will be set level                                */
/**********************************************************************/
void SetDspSpics(u32 cs){
    if(cs){
        gpio_base->or=(gpio_base->or | 0x00400000);    //out height
    }
    else{
        gpio_base->or=(gpio_base->or & 0xffbfffff);    //out low
    }
}

/**********************************************************************/
/* NAME     : DisHexData                                              */
/* FUNCTION : format out the hex data  as debug out mode              */
/* PARAMETER: *buf :will be display data buf pointer                  */
/*            count:will be display data length                       */
/**********************************************************************/
void DisHexData(u8 * buf ,u32 Count){
    u32 i;
    printf("       ");
    for(i=0;i<16;i++){
        if(i==8) printf(" ");
        printf("%02X ",i);
    }
    printf("\r\n       ");
    for(i=0;i<16;i++){
        printf("...");
    }
    for(i=0;i<Count;i++){
        if(((i%512)==0)&(i!=0)) printf("\r\n");
        if((i%8)==0) printf(" ");
        if((i%16)==0){
             printf("\r\n");
             printf("%04X . ",i);
        }
        printf("%02X ",buf[i]);
 
    }
    //-----------------------------------
    printf("\r\n");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线欧美日韩精品| 欧美日韩一区二区三区不卡| 色国产综合视频| 7777精品伊人久久久大香线蕉经典版下载| 久久色.com| 亚洲www啪成人一区二区麻豆| 国内精品久久久久影院色| 久久精品一级爱片| 欧美一卡二卡三卡| 久久伊人中文字幕| 国产日韩成人精品| 一区在线观看视频| 亚洲一区二区免费视频| 午夜婷婷国产麻豆精品| 日韩电影免费在线观看网站| 蜜芽一区二区三区| 国产精品一区二区免费不卡| 成人性色生活片免费看爆迷你毛片| 国产宾馆实践打屁股91| 91在线一区二区三区| 91国产成人在线| 欧美电影精品一区二区| 国产女人aaa级久久久级| 亚洲人成网站精品片在线观看 | 亚洲国产精品欧美一二99| 亚洲一区二区三区四区在线免费观看 | 亚洲欧美日韩综合aⅴ视频| 亚洲黄色免费电影| 国产情人综合久久777777| 一区二区三区四区在线播放| 成人激情黄色小说| 中文字幕不卡在线播放| 国产一区二区调教| 久久九九久精品国产免费直播| 久久se这里有精品| 久久综合狠狠综合久久综合88 | 成人性生交大片免费看在线播放| 精品久久久久久无| 国产一区中文字幕| 国产日韩综合av| 成人国产精品免费观看视频| 国产精品久久久久影院| 91免费在线视频观看| 一区二区三区日韩| 欧美男男青年gay1069videost | 亚洲蜜臀av乱码久久精品| 99久久婷婷国产综合精品| 日韩一区欧美一区| 色先锋aa成人| 婷婷六月综合网| 91精品国产免费| 国产美女视频91| 中文字幕视频一区二区三区久| 99久久精品国产一区二区三区 | 国产亚洲精品aa| 99国产一区二区三精品乱码| 亚洲综合在线五月| 欧美一区二区三区四区在线观看| 久久国产乱子精品免费女| 国产亚洲一区二区三区| 91浏览器在线视频| 天堂在线一区二区| 久久影音资源网| 色哟哟国产精品免费观看| 青青草国产精品97视觉盛宴| 久久免费偷拍视频| 在线精品视频一区二区三四 | 亚洲不卡在线观看| 精品国产乱码91久久久久久网站| 高清视频一区二区| 丝袜亚洲另类欧美综合| 久久精品夜色噜噜亚洲a∨| 亚洲乱码精品一二三四区日韩在线 | 久久久久国产精品麻豆ai换脸| 首页欧美精品中文字幕| 欧美日韩不卡一区| 五月婷婷综合在线| 欧美日韩二区三区| 日本中文字幕不卡| 欧美一卡二卡在线观看| 美国欧美日韩国产在线播放| 日韩一区二区三区在线视频| 日韩av在线播放中文字幕| 3atv一区二区三区| 久久精品噜噜噜成人av农村| 欧美成人精品福利| 国产综合色精品一区二区三区| 久久综合色婷婷| 国产iv一区二区三区| 中文字幕亚洲一区二区va在线| 99精品久久免费看蜜臀剧情介绍| 日韩一区中文字幕| 在线观看中文字幕不卡| 日韩精品亚洲一区二区三区免费| 51精品国自产在线| 国产精品99久久久| 亚洲另类中文字| 欧美精品一二三| 精品一区二区精品| 成人欧美一区二区三区1314 | 日本不卡一区二区| 精品裸体舞一区二区三区| 国产久卡久卡久卡久卡视频精品| 亚洲国产精品成人久久综合一区| 91在线观看视频| 天堂在线亚洲视频| 欧美国产亚洲另类动漫| 欧美日韩中文字幕一区| 九色综合狠狠综合久久| 国产精品久久国产精麻豆99网站| 欧美系列日韩一区| 国产主播一区二区| 亚洲综合成人在线| 久久麻豆一区二区| 欧美偷拍一区二区| 粉嫩av一区二区三区| 亚洲高清免费观看高清完整版在线观看| 欧美一区二区视频在线观看2022 | 91成人在线免费观看| 久久99国产精品成人| 亚洲人xxxx| 精品久久久久av影院| 欧美一a一片一级一片| 国产福利91精品一区二区三区| 亚洲色图都市小说| 久久久夜色精品亚洲| 欧美日韩国产美女| 色综合天天做天天爱| 国产精品自拍在线| 日本伊人色综合网| 亚洲男同1069视频| 中文字幕不卡在线播放| 精品欧美黑人一区二区三区| 欧美日韩在线播放三区四区| 成人v精品蜜桃久久一区| 久久99精品一区二区三区三区| 夜夜精品浪潮av一区二区三区| 国产日韩欧美制服另类| 欧美一区二区三区小说| 欧美精品欧美精品系列| 日本精品裸体写真集在线观看| 成人在线综合网| 国产美女精品在线| 久久69国产一区二区蜜臀| 日韩国产欧美视频| 午夜电影久久久| 性做久久久久久| 亚洲高清一区二区三区| 亚洲国产日韩av| 亚洲一区二区三区不卡国产欧美 | 日本一道高清亚洲日美韩| 一区二区高清免费观看影视大全| 亚洲国产岛国毛片在线| 中文字幕精品三区| 国产精品免费久久| 国产精品久久夜| 亚洲天堂成人在线观看| 亚洲乱码中文字幕综合| 亚洲男人的天堂在线观看| 一区二区视频在线| 亚洲成人一区二区在线观看| 亚洲成人av一区二区三区| 偷拍一区二区三区| 六月丁香婷婷色狠狠久久| 韩国欧美国产一区| 国产成人无遮挡在线视频| 成人黄色免费短视频| 色香色香欲天天天影视综合网| 色综合久久九月婷婷色综合| 欧美色中文字幕| 日韩一区二区三区三四区视频在线观看 | 99re热这里只有精品视频| 色综合久久综合中文综合网| 欧美午夜在线观看| 欧美狂野另类xxxxoooo| 欧美xxxx在线观看| 国产日韩精品一区二区三区| 国产精品久久久久久久久免费相片| 亚洲视频在线一区观看| 亚洲国产精品麻豆| 精品一区二区在线视频| 成人精品国产福利| 欧美日韩国产一区| 久久久99久久| 亚洲国产日产av| 精品一区中文字幕| 一本色道a无线码一区v| 91精品免费在线| 亚洲国产精品国自产拍av| 亚洲综合色婷婷| 国产精品亚洲一区二区三区在线| 99久久精品情趣| 欧美草草影院在线视频| 亚洲欧美区自拍先锋| 精品制服美女久久| 91国产免费观看| 久久精品视频在线看| 午夜不卡av免费| 91在线视频官网| 久久久久久久网|