Forum Discussion
Altera_Forum
Honored Contributor
15 years agoat laset ,change code as this ,work baddly as now
//从RS232接收字符,传到SDRAM,在将所传送的信息,反馈到JTAG和RS232(通过文件形式),检查两者是否正确# include <stdio.h># include <stdlib.h># include "sys/alt_dma.h"# include "altera_avalon_uart_regs.h"# include "altera_avalon_dma_regs.h"# include "system.h"# include "alt_types.h"# include <string.h># define TRANSFER_LENGTH 1024 static volatile int tx_done = 0; static char str[512]={"this is str data,well\n"}; //回调函数 static void done (void* handle) { tx_done++; } int main() { alt_u8 i; FILE *fp_LCD=0; FILE *fp_RS232=0; fp_LCD = fopen("/dev/lcd","w"); fp_RS232 = fopen("/dev/rs232","w"); int rc; alt_dma_rxchan rxchan; void* source = RS232_BASE+1;/* 源地址 */ void* dest = (void*)(SDRAM_BASE+100); /* 打开发送通道 */ if ((rxchan = alt_dma_rxchan_open("/dev/dma")) == 0) { printf ("successful to open transmit channel\n"); exit (1); } /* 设置发送地址固定 */ if ((rc = alt_dma_rxchan_ioctl(rxchan, ALT_DMA_RX_ONLY_ON, source)) < 0) { printf ("Failed to set ioctl, reason = %i\n", rc); exit (1); } //设置每次接收一个字节,即8位,因为UART每次只发送8位 if((rc = alt_dma_rxchan_ioctl(rxchan,ALT_DMA_SET_MODE_8 ,NULL))<0) { printf("Failed to set mode 8\n"); exit(1); } /* 开始接收 */ if ((rc = alt_dma_rxchan_prepare(rxchan, SDRAM_BASE+100, 32, done, NULL)) < 0) { printf ("Failed to post transmit request, reason = %i\n", rc); exit (1); } /* 等待接收结束 */ while (!tx_done); printf ("Transfer to jtag!\n"); fprintf(fp_LCD,"Transfer to lcd! \n"); fprintf(fp_RS232,"Transfer to rs232 ! \n"); //alt_dma_rxchan_close(rxchan); memcpy(str,SDRAM_BASE+100,32); // 将SDRAM内容复制到ONCHIP str,并显示输出,以便检查 for(i=0;i<=32;i++) { printf ("%x\n",str);fprintf(fp_lcd,str); fprintf(fp_RS232,str[i]); //printf("%x\n",(SDRAM_BASE+100+i)); } //printf("%x\n",SDRAM_BASE+100); alt_dma_rxchan_close(rxchan); return 0; }