FPGA與DSP5509A通過MCBSP介面通訊

2022-08-31 17:36:13 字數 3069 閱讀 8125

#include #include mcbsp_handle rmcbsp,tmcbsp;

mcbsp_config mcbsp0config = ;

mcbsp_config mcbsp1config = ;

void main(void)

; leddata = mcbsp_read16(rmcbsp);

printf("%d\n",leddata);

leddata=leddata+1;

while(!mcbsp_xrdy(tmcbsp)){};

mcbsp_write16(tmcbsp,leddata);

}; }

module mcbsp(clk,reset,dr,dx,clkr,clkx,fsx,fsr,data,clkg);

/*clkg為signaltap抓取時鐘,data為被抓取物件,兩個訊號僅作觀測,未使用*/

input clk,dx,reset;

output clkr,clkx,fsr,fsx,dr,data,clkg;

parameter t100ms=15'd25_000; /*100ms定時產生幀同步訊號*/

reg clkr,clkx,fsr,fsx,dr,clkg;

//fpga傳送端定義

reg [15:0]num[499:0];

reg [15:0]buff;

reg [3:0]flag;

reg [14:0]count1;

reg [15:0]i;

reg [3:0]k;

//fpga接收端定義

reg [15:0]buff2;

reg [4:0]flag2;

reg [14:0]count2;

reg [3:0]j;

reg [15:0]data;

reg [5:0]count;

/*500個資料初始化*/

initial

begin

for(i=0;i<500;i=i+1)

num[i]=i;

end/*設定時鐘頻率為512k*/

always@(posedge clk or negedge reset)

if(!reset)

begin

clkr<=1'b1;

clkx<=1'b0;

count<=6'd0;

endelse if(count==50)

begin

clkr<=~clkr;

clkx<=~clkx;

count<=6'd1;

endelse

count<=count+1;

/*dsp設定為clkr時鐘下降沿讀取資料,fpga在上公升沿向dsp傳送資料,幀同步訊號在下降沿傳送*/

always@(negedge clkr or negedge reset)

begin

if(!reset)

begin

fsr<=1'b0;

count1<=15'd0;

i<=16'd0;

endelse if(count1==t100ms)

begin

count1<=15'd1;

fsr<=1'b1;

buff<=num[i];

if(i<499)

i<=i+1;

else

i<=16'd0;

endelse if(fsr)

begin

fsr<=1'b0;

count1<=count1+1;

endelse

count1<=count1+1;

endalways@(posedge clkr or negedge reset)

begin

if(!reset)

begin

flag<=4'd0;

k<=4'd15;

endelse if(fsr)

begin

flag<=4'd15;

dr<=buff[k];

k<=k-1;

endelse if(flag)

begin

flag<=flag-1;

dr<=buff[k];

if(k)

k<=k-1;

else

k<=4'd15;

endend/*dsp設定為clkx時鐘上公升沿傳送資料,fpga在下降讀取dsp傳送的資料,幀同步訊號在上公升沿傳送*/

always@(posedge clkx or negedge reset)

begin

if(!reset)

begin

fsx<=1'b0;

count2<=15'd0;

endelse if(count2==t100ms)

begin

count2<=15'd1;

fsx<=1'b1;

endelse if(fsx)

begin

fsx<=1'b0;

count2<=count2+1;

endelse

count2<=count2+1;

endalways@(negedge clkx or negedge reset)

begin

if(!reset)

begin

flag2<=5'd0;

buff2<=16'h0;

clkg<=1'b0;

endelse if(fsx)

begin

flag2<=5'd16;

data<=buff2;

j<=4'd15;

clkg<=1'b1;

endelse if(flag2)

begin

flag2<=flag2-1;

buff2[j]<=dx;

if(j==0)

clkg<=1'b0;

else

j<=j-1;

endendendmodule

對DSP5509A時鐘發生器的除錯

設計了一塊dsp fpga系統的資料採集板,但是怎麼才能確定設計的dsp部分是可以正常工作的呢?fpga部分的好測試。對於dsp能否正常工作可從以下幾個方面進行測試 1 上電檢測dsp的clkin引腳,用示波器檢視波形是否失真,電壓是否在合理範圍內 2 配置clkmd暫存器使pll在鎖相模式,用示波...

DSP5509A 編譯出現的問題解決

在給搭建好的dsp開發環境寫測試 的時候編譯出現了幾個錯誤,現在把錯誤解決的方法記錄一下。1。warning stack section not found ignoring stack option 這只是乙個警告,忽視也行,但是看著不舒服,就解決了一下。解決辦法 builder option l...

DSP5509A bootload與二次引導詳解

要使用bootloader首先需要配置gpio電平來設定boot方式,我手上的兩塊板子分別使用的是i2c eeprom與emif 下圖是ti對於此方式的解釋 程式入口位址是引導表載入結束後,使用者程式開始執行的位址 暫存器配置數目決定了後面有多少個暫存器需要配置 延時標誌為0xffff時,延時才被執...