#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時,延時才被執...