中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

安康做企業(yè)網(wǎng)站的2021百度模擬點(diǎn)擊工具

安康做企業(yè)網(wǎng)站的,2021百度模擬點(diǎn)擊工具,什么網(wǎng)站可以做批發(fā)鞋子,香港代理服務(wù)器ip萌新的SOC學(xué)習(xí)之SD卡讀寫(xiě)大數(shù)據(jù)的實(shí)驗(yàn) 記得先設(shè)定 FIFO 的位寬和深度 還有DMA 的大小 其他基本結(jié)構(gòu)設(shè)計(jì)參照上一個(gè)SD卡讀寫(xiě)小數(shù)據(jù)的實(shí)驗(yàn) #include "xparameters.h" //包含vivado所導(dǎo)出的信息包含vivado的基地址 #include "xil_printf.h" //調(diào)用打印函…

萌新的SOC學(xué)習(xí)之SD卡讀寫(xiě)大數(shù)據(jù)的實(shí)驗(yàn)

記得先設(shè)定 FIFO 的位寬和深度 還有DMA 的大小
其他基本結(jié)構(gòu)設(shè)計(jì)參照上一個(gè)SD卡讀寫(xiě)小數(shù)據(jù)的實(shí)驗(yàn)

#include "xparameters.h"  //包含vivado所導(dǎo)出的信息包含vivado的基地址
#include "xil_printf.h"   //調(diào)用打印函數(shù)的時(shí)候,需要引用這個(gè)頭文件
#include "ff.h"           //使用FATFS庫(kù)函數(shù)時(shí)需要
#include "xstatus.h"      //需要的一些關(guān)鍵信息
#include"stdio.h"         // 專(zhuān)業(yè)寫(xiě)法
#include "xdevcfg.h"
#include "xil_io.h"
/下面講述關(guān)于 DMA
#include "xaxidma.h"
#include "xparameters.h"
#include "xil_exception.h"
#include "xscugic.h"
#include "sleep.h"/************************** Variable Definitions *****************************/
static FATFS fatfs;                         //文件系統(tǒng)#define FILE_NAME "parameter_512_512.txt"                //定義文件名#define FILE_READ_NAME "parameter_512_512_read_7.txt"static XAxiDma axidma;     //XAxiDma實(shí)例
static XScuGic intc;       //中斷控制器的實(shí)例
volatile int tx_done;      //發(fā)送完成標(biāo)志
volatile int rx_done;      //接收完成標(biāo)志
volatile int error;        //傳輸出錯(cuò)標(biāo)志/************************** Constant Definitions *****************************/#define DMA_DEV_ID          XPAR_AXIDMA_0_DEVICE_ID
#define RX_INTR_ID          XPAR_FABRIC_AXIDMA_0_S2MM_INTROUT_VEC_ID
#define TX_INTR_ID          XPAR_FABRIC_AXIDMA_0_MM2S_INTROUT_VEC_ID
#define INTC_DEVICE_ID      XPAR_SCUGIC_SINGLE_DEVICE_ID
#define DDR_BASE_ADDR       XPAR_PS7_DDR_0_S_AXI_BASEADDR   //0x00100000
#define MEM_BASE_ADDR       (DDR_BASE_ADDR + 0x1000000)     //0x01100000
#define TX_BUFFER_BASE      (MEM_BASE_ADDR + 0x00100000)    //0x01200000
#define RX_BUFFER_BASE      (MEM_BASE_ADDR + 0x00700000)    //0x01800000
#define RESET_TIMEOUT_COUNTER   100000000    //復(fù)位時(shí)間
//復(fù)位時(shí)間設(shè)置的如此之長(zhǎng) 是為了保證在下面的刷新DMA的用時(shí) 雖然我之前小數(shù)據(jù)只寫(xiě)了1000//#define TEST_START_VALUE        0x0      //測(cè)試起始值
//#define MAX_PKT_LEN             0x100    //發(fā)送包長(zhǎng)度 對(duì)應(yīng)十進(jìn)制是256  DMA傳遞的單次包長(zhǎng)最大是256
//指的是stream流的包長(zhǎng)度 不是突發(fā)長(zhǎng)度#define MAX_PKT_LEN            163840    //發(fā)送包長(zhǎng)度  163840
//指的是單次 DMA 傳輸?shù)陌L(zhǎng)度 因?yàn)閿?shù)據(jù)一共有 16384 × 8  再加上 轉(zhuǎn)#define    len                    163840        //傳輸數(shù)據(jù)的大小//函數(shù)聲明
int platform_init_fs();
int sd_mount() ;     //  掛載SD卡
int sd_write_data(char *file_name,u32 src_addr,u32 byte_len); //SD卡寫(xiě)數(shù)據(jù)
int sd_read_data(char *file_name,u32 src_addr,u32 byte_len) ; //SD卡讀數(shù)據(jù)
static void tx_intr_handler(void *callback);
static void rx_intr_handler(void *callback);
static int setup_intr_system(XScuGic * int_ins_ptr, XAxiDma * axidma_ptr,u16 tx_intr_id, u16 rx_intr_id);
static void disable_intr_system(XScuGic * int_ins_ptr, u16 tx_intr_id,u16 rx_intr_id);// main函數(shù)
int main()
{int status;   // 當(dāng)前狀態(tài)int i = 0 ;                    // 傳遞函數(shù)使用的順序i tint t = 0 ;u32 value = 0 ;u32  *tx_buffer_ptr;u32  *rx_buffer_ptr;XAxiDma_Config *config;tx_buffer_ptr = (u32 *) TX_BUFFER_BASE;rx_buffer_ptr = (u32 *) RX_BUFFER_BASE;// 如果分配成功:則返回指向被分配內(nèi)存空間的指針,不然返回指針NULL 。同時(shí),當(dāng)內(nèi)存不再使用的時(shí)候,應(yīng)使用free()函數(shù)將內(nèi)存塊釋放掉。//	 關(guān)于:void*,表示未確定類(lèi)型的指針,c,//c++規(guī)定void*可以強(qiáng)轉(zhuǎn)為任何其他類(lèi)型的指針,關(guān)于void還有一種說(shuō)法就是其他任何類(lèi)型都可以直接賦值給它,無(wú)需進(jìn)行強(qiáng)轉(zhuǎn),但是反過(guò)來(lái)不可以 。//它被用來(lái)在運(yùn)行時(shí)而不是編譯時(shí)分配內(nèi)存。因此,如果您的數(shù)據(jù)數(shù)組基于來(lái)自用戶(hù),數(shù)據(jù)庫(kù),文件等的某種輸入,那么一旦知道所需大小,就必須使用malloc。//malloc 在堆上開(kāi)辟空間char *ch_data = NULL;           //SD卡讀到的數(shù)據(jù)char *ddr_rd_data = NULL;       //重新寫(xiě)回SD卡的數(shù)據(jù)ch_data = malloc(len);if(ch_data == NULL) printf("ERRIOR \r\n");ddr_rd_data = malloc(len);if(ddr_rd_data == NULL) printf("ERRIOR \r\n");
// 兩個(gè)東西 一個(gè) 放 開(kāi)始內(nèi)容 另一個(gè) 寫(xiě)結(jié)束//常規(guī)status = sd_mount();           //掛載SD卡----調(diào)用函數(shù)///if(status != XST_SUCCESS){xil_printf("Failed to open SD card!\n");return 0;}elsexil_printf("Success to open SD card!\n");//為了展示效果 我決定寫(xiě)一下sd卡//len = strlen(src_str);         //計(jì)算字符串長(zhǎng)度//SD卡寫(xiě)數(shù)據(jù)//sd_write_data(FILE_NAME,(u32)src_str,len);sd_read_data(FILE_NAME,(u32)ch_data,len);//printf("Successful write SD  in Pc ! \r\n");usleep(1);// sd_read_data(FILE_NAME,(u32)dest_str,len);   //讀數(shù)據(jù)進(jìn)入dest_str//printf("Successful Read SD ! \r\n");//到目前我們已經(jīng)把數(shù)據(jù)放到了dest_str// 寫(xiě)數(shù)據(jù)for(i=0; i<len; i++){Xil_Out32(TX_BUFFER_BASE+i,ch_data[i]);}i=0;usleep(1);//讀數(shù)據(jù)printf("Successful Write SD in DDR! \r\n");xil_printf("--- Entering main() --- \r\n");printf("DMA initialization succeeded ! \r\n");config = XAxiDma_LookupConfig(DMA_DEV_ID);    //查找DMA的配置信息if (!config) {xil_printf("No config found for %d\r\n", DMA_DEV_ID);return XST_FAILURE;}//初始化DMA引擎status = XAxiDma_CfgInitialize(&axidma, config);if (status != XST_SUCCESS) {xil_printf("Initialization failed %d\r\n", status);return XST_FAILURE;}if (XAxiDma_HasSg(&axidma)) {xil_printf("Device configured as SG mode \r\n");return XST_FAILURE;}status = setup_intr_system(&intc, &axidma, TX_INTR_ID, RX_INTR_ID);if (status != XST_SUCCESS) {xil_printf("Failed intr setup\r\n");return XST_FAILURE;}//初始化標(biāo)志信號(hào)tx_done = 0;rx_done = 0;error   = 0;usleep(10);//數(shù)據(jù)地址都確定了Xil_DCacheFlushRange((UINTPTR)(tx_buffer_ptr), len);   //刷新Data Cache
// may be this is wrongprintf("DDR send Read data5 \n");status = XAxiDma_SimpleTransfer(&axidma, (u32) (tx_buffer_ptr),len, XAXIDMA_DMA_TO_DEVICE);if (status != XST_SUCCESS) {return XST_FAILURE;}Xil_DCacheFlushRange((UINTPTR) (tx_buffer_ptr), len);   //刷新Data Cacheprintf("DDR send Read data6 \n");usleep(10) ;//DMA寫(xiě)通道開(kāi)啟status = XAxiDma_SimpleTransfer(&axidma, (u32) (rx_buffer_ptr),len, XAXIDMA_DEVICE_TO_DMA);首先是器件例化的指針 ,起始或目的地址 ,傳輸長(zhǎng)度  , DMA傳輸方向if (status != XST_SUCCESS) {return XST_FAILURE;}printf("DDR send Read data7 \n");Xil_DCacheFlushRange((UINTPTR) (rx_buffer_ptr), len);   //刷新Data Cachewhile (!tx_done && !rx_done && !error);printf("DDR get Read data \n");//傳輸出錯(cuò)if (error) {xil_printf("Failed test transmit%s done, ""receive %s done\r\n", tx_done ? "" : "tx_done not",rx_done ? "" : "rx_done not");goto Done;}usleep(10000);//傳輸完成,檢查數(shù)據(jù)是否正確xil_printf("Successfully ran AXI DMA Loop\r\n");disable_intr_system(&intc, TX_INTR_ID, RX_INTR_ID);Done: xil_printf("--- Exiting main() --- \r\n");for(i=0; i<len; i++){value = Xil_In32(RX_BUFFER_BASE+i);ddr_rd_data[t] = value;t++;}
usleep(1);sd_write_data(FILE_READ_NAME,(u32)ddr_rd_data,len);printf("SD Write Successfully ! \r\n");free(ch_data);free(ddr_rd_data);return XST_SUCCESS;
}//初始化文件系統(tǒng)
int platform_init_fs()
{FRESULT status;TCHAR *Path = "0:/";BYTE work[FF_MAX_SS];//注冊(cè)一個(gè)工作區(qū)(掛載分區(qū)文件系統(tǒng))//在使用任何其它文件函數(shù)之前,必須使用f_mount函數(shù)為每個(gè)使用卷注冊(cè)一個(gè)工作區(qū)status = f_mount(&fatfs, Path, 1);  //掛載SD卡if (status != FR_OK) {xil_printf("Volume is not FAT formated; formating FAT\r\n");//格式化SD卡status = f_mkfs(Path, FM_FAT32, 0, work, sizeof work);if (status != FR_OK) {xil_printf("Unable to format FATfs\r\n");return -1;}//格式化之后,重新掛載SD卡status = f_mount(&fatfs, Path, 1);if (status != FR_OK) {xil_printf("Unable to mount FATfs\r\n");return -1;}}return 0;
}//掛載SD(TF)卡
int sd_mount()
{FRESULT status;//初始化文件系統(tǒng)(掛載SD卡,如果掛載不成功,則格式化SD卡)status = platform_init_fs();if(status){xil_printf("ERROR: f_mount returned %d!\n",status);return XST_FAILURE;}return XST_SUCCESS;
}//SD卡寫(xiě)數(shù)據(jù)
int sd_write_data(char *file_name,u32 src_addr,u32 byte_len)
{FIL fil;         //文件對(duì)象UINT bw;         //f_write函數(shù)返回已寫(xiě)入的字節(jié)數(shù)//打開(kāi)一個(gè)文件,如果不存在,則創(chuàng)建一個(gè)文件f_open(&fil,file_name,FA_CREATE_ALWAYS | FA_WRITE);//移動(dòng)打開(kāi)的文件對(duì)象的文件讀/寫(xiě)指針     0:指向文件開(kāi)頭f_lseek(&fil, 0);//向文件中寫(xiě)入數(shù)據(jù)f_write(&fil,(void*) src_addr,byte_len,&bw);//關(guān)閉文件f_close(&fil);return 0;
}//SD卡讀數(shù)據(jù)
int sd_read_data(char *file_name,u32 src_addr,u32 byte_len)
{FIL fil;         //文件對(duì)象UINT br;         //f_read函數(shù)返回已讀出的字節(jié)數(shù)//打開(kāi)一個(gè)只讀的文件f_open(&fil,file_name,FA_READ);//移動(dòng)打開(kāi)的文件對(duì)象的文件讀/寫(xiě)指針     0:指向文件開(kāi)頭f_lseek(&fil,0);//從SD卡中讀出數(shù)據(jù)f_read(&fil,(void*)src_addr,byte_len,&br);//關(guān)閉文件f_close(&fil);return 0;
}//DMA TX中斷處理函數(shù)
static void tx_intr_handler(void *callback)
{int timeout;u32 irq_status;XAxiDma *axidma_inst = (XAxiDma *) callback;//讀取待處理的中斷irq_status = XAxiDma_IntrGetIrq(axidma_inst, XAXIDMA_DMA_TO_DEVICE);//確認(rèn)待處理的中斷XAxiDma_IntrAckIrq(axidma_inst, irq_status, XAXIDMA_DMA_TO_DEVICE);//Tx出錯(cuò)if ((irq_status & XAXIDMA_IRQ_ERROR_MASK)) {error = 1;XAxiDma_Reset(axidma_inst);timeout = RESET_TIMEOUT_COUNTER;while (timeout) {if (XAxiDma_ResetIsDone(axidma_inst))break;timeout -= 1;}return;}//Tx完成if ((irq_status & XAXIDMA_IRQ_IOC_MASK))tx_done = 1;
}//DMA RX中斷處理函數(shù)
static void rx_intr_handler(void *callback)
{u32 irq_status;int timeout;XAxiDma *axidma_inst = (XAxiDma *) callback;irq_status = XAxiDma_IntrGetIrq(axidma_inst, XAXIDMA_DEVICE_TO_DMA);XAxiDma_IntrAckIrq(axidma_inst, irq_status, XAXIDMA_DEVICE_TO_DMA);//Rx出錯(cuò)if ((irq_status & XAXIDMA_IRQ_ERROR_MASK)) {error = 1;XAxiDma_Reset(axidma_inst);timeout = RESET_TIMEOUT_COUNTER;while (timeout) {if (XAxiDma_ResetIsDone(axidma_inst))break;timeout -= 1;}return;}//Rx完成if ((irq_status & XAXIDMA_IRQ_IOC_MASK))rx_done = 1;
}//建立DMA中斷系統(tǒng)
//  @param   int_ins_ptr是指向XScuGic實(shí)例的指針
//  @param   AxiDmaPtr是指向DMA引擎實(shí)例的指針
//  @param   tx_intr_id是TX通道中斷ID
//  @param   rx_intr_id是RX通道中斷ID
//  @return:成功返回XST_SUCCESS,否則返回XST_FAILURE
static int setup_intr_system(XScuGic * int_ins_ptr, XAxiDma * axidma_ptr,u16 tx_intr_id, u16 rx_intr_id)
{int status;XScuGic_Config *intc_config;//初始化中斷控制器驅(qū)動(dòng)intc_config = XScuGic_LookupConfig(INTC_DEVICE_ID);if (NULL == intc_config) {return XST_FAILURE;}status = XScuGic_CfgInitialize(int_ins_ptr, intc_config,intc_config->CpuBaseAddress);if (status != XST_SUCCESS) {return XST_FAILURE;}//設(shè)置優(yōu)先級(jí)和觸發(fā)類(lèi)型XScuGic_SetPriorityTriggerType(int_ins_ptr, tx_intr_id, 0xA0, 0x3);XScuGic_SetPriorityTriggerType(int_ins_ptr, rx_intr_id, 0xA0, 0x3);//為中斷設(shè)置中斷處理函數(shù)status = XScuGic_Connect(int_ins_ptr, tx_intr_id,(Xil_InterruptHandler) tx_intr_handler, axidma_ptr);if (status != XST_SUCCESS) {return status;}status = XScuGic_Connect(int_ins_ptr, rx_intr_id,(Xil_InterruptHandler) rx_intr_handler, axidma_ptr);if (status != XST_SUCCESS) {return status;}XScuGic_Enable(int_ins_ptr, tx_intr_id);XScuGic_Enable(int_ins_ptr, rx_intr_id);//啟用來(lái)自硬件的中斷Xil_ExceptionInit();Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler) XScuGic_InterruptHandler,(void *) int_ins_ptr);Xil_ExceptionEnable();//使能DMA中斷XAxiDma_IntrEnable(&axidma, XAXIDMA_IRQ_ALL_MASK, XAXIDMA_DMA_TO_DEVICE);XAxiDma_IntrEnable(&axidma, XAXIDMA_IRQ_ALL_MASK, XAXIDMA_DEVICE_TO_DMA);return XST_SUCCESS;}//此函數(shù)禁用DMA引擎的中斷
static void disable_intr_system(XScuGic * int_ins_ptr, u16 tx_intr_id,u16 rx_intr_id)
{XScuGic_Disconnect(int_ins_ptr, tx_intr_id);XScuGic_Disconnect(int_ins_ptr, rx_intr_id);
}
http://www.risenshineclean.com/news/60462.html

相關(guān)文章:

  • 公司想建立一個(gè)網(wǎng)站嗎app推廣好做嗎
  • 免費(fèi)外貿(mào)網(wǎng)站國(guó)際新聞最新消息2022
  • 建設(shè)網(wǎng)站需要先構(gòu)建好模型聊城seo整站優(yōu)化報(bào)價(jià)
  • 網(wǎng)站怎么做微博鏈接網(wǎng)絡(luò)營(yíng)銷(xiāo)的8個(gè)基本職能
  • 做觸屏網(wǎng)站重慶seo教程博客
  • 車(chē)商城網(wǎng)站建設(shè)新媒體運(yùn)營(yíng)培訓(xùn)課程
  • mail263企業(yè)郵箱登錄入口鄭州網(wǎng)站優(yōu)化外包
  • 新媒體公司網(wǎng)站怎么做鞍山seo公司
  • 做個(gè)網(wǎng)站多少錢(qián)怎么接廣告廣告代運(yùn)營(yíng)公司
  • 如何擁有自己的專(zhuān)屬域名滁州網(wǎng)站seo
  • 安康做網(wǎng)站的公司電話(huà)小紅書(shū)搜索指數(shù)
  • 網(wǎng)站請(qǐng)人做要多少錢(qián)新聞稿營(yíng)銷(xiāo)
  • 廣告型網(wǎng)站怎么做的如何查詢(xún)網(wǎng)站收錄情況
  • 萊蕪招聘的網(wǎng)站app開(kāi)發(fā)公司有哪些
  • 網(wǎng)站備案好處如何進(jìn)行seo
  • 網(wǎng)站色彩運(yùn)用cba排名最新排名
  • 東莞網(wǎng)頁(yè)制作免費(fèi)網(wǎng)站制作如何在百度上發(fā)布廣告
  • 新時(shí)代政府網(wǎng)站建設(shè)網(wǎng)推什么平臺(tái)好用
  • 重慶網(wǎng)站查詢(xún)網(wǎng)絡(luò)營(yíng)銷(xiāo)有哪些手段
  • 怎么做自己的導(dǎo)航網(wǎng)站網(wǎng)站推廣排名
  • 西安網(wǎng)站建設(shè)官網(wǎng)網(wǎng)推
  • 紹興高端網(wǎng)站設(shè)計(jì)學(xué)校seo推廣培訓(xùn)班
  • 找網(wǎng)站設(shè)計(jì)公司高權(quán)重友情鏈接
  • 南陽(yáng)網(wǎng)站建設(shè)公司seo管理與優(yōu)化期末試題
  • 如何建設(shè)網(wǎng)站論壇有沒(méi)有購(gòu)買(mǎi)鏈接
  • 展示型網(wǎng)站制作公司中國(guó)體育新聞
  • web 網(wǎng)站做甘特圖seo模擬點(diǎn)擊工具
  • 中國(guó)最好的網(wǎng)站建設(shè)公司百度合伙人官網(wǎng)app
  • 寧波市鄞州區(qū)建設(shè)局網(wǎng)站市場(chǎng)營(yíng)銷(xiāo)課程
  • 東莞厚街做網(wǎng)站百度網(wǎng)站免費(fèi)優(yōu)化軟件下載