日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

fpga初始化错误_关于用FPGA对sja1000进行初始化的有关问题

發(fā)布時(shí)間:2024/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fpga初始化错误_关于用FPGA对sja1000进行初始化的有关问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于用FPGA對(duì)sja1000進(jìn)行初始化的問(wèn)題

我用pio口與sja1000的各引腳相連,初始化的時(shí)候讀寫(xiě)一直有問(wèn)題,哪位大俠幫忙看看啊,主要是看看我的讀寫(xiě)函數(shù)哪兒有問(wèn)題,謝了!下面是源程序:

unsigned char read_sja1000(unsigned char add)

{

unsigned char data;

IOWR_ALTERA_AVALON_PIO_DATA(ALE_BASE, 0);

IOWR_ALTERA_AVALON_PIO_DATA(WR_N_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DATA(CS_N_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DATA(RD_N_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DIRECTION(CAN_AD_BASE, 1); //置為輸出

IOWR_ALTERA_AVALON_PIO_DATA(ALE_BASE, 1); //置ALE為高電平

IOWR_ALTERA_AVALON_PIO_DATA(CAN_AD_BASE, add);

IOWR_ALTERA_AVALON_PIO_DATA(ALE_BASE, 0); //置ALE為低電平

IOWR_ALTERA_AVALON_PIO_DIRECTION(CAN_AD_BASE, 0); //置為輸入

IOWR_ALTERA_AVALON_PIO_DATA(CS_N_BASE, 0); //置CS為低電平

IOWR_ALTERA_AVALON_PIO_DATA(RD_N_BASE, 0); //置RD為低電平

data=IORD_ALTERA_AVALON_PIO_DATA(CAN_AD_BASE);

IOWR_ALTERA_AVALON_PIO_DATA(RD_N_BASE, 0); //置RD為低電平

IOWR_ALTERA_AVALON_PIO_DATA(RD_N_BASE, 1); //置RD為高電平

IOWR_ALTERA_AVALON_PIO_DATA(CS_N_BASE, 1); //置CS為高電平

return(data);

}

void write_sja1000(unsigned char add,unsigned char data)

{

IOWR_ALTERA_AVALON_PIO_DATA(ALE_BASE, 0);

IOWR_ALTERA_AVALON_PIO_DATA(WR_N_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DATA(CS_N_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DATA(RD_N_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DIRECTION(CAN_AD_BASE, 1); //置為輸出

IOWR_ALTERA_AVALON_PIO_DATA(ALE_BASE, 1); //置ALE為高電平

IOWR_ALTERA_AVALON_PIO_DATA(CAN_AD_BASE, add);

IOWR_ALTERA_AVALON_PIO_DATA(ALE_BASE, 0); //置ALE為低電平

IOWR_ALTERA_AVALON_PIO_DATA(CS_N_BASE, 0); //置CS為低電平

IOWR_ALTERA_AVALON_PIO_DATA(WR_N_BASE, 0); //置WR低電平

IOWR_ALTERA_AVALON_PIO_DATA(CAN_AD_BASE, data);

IOWR_ALTERA_AVALON_PIO_DATA(WR_N_BASE, 0); //置WR低電平

IOWR_ALTERA_AVALON_PIO_DATA(WR_N_BASE, 1); //置WR為高電平

IOWR_ALTERA_AVALON_PIO_DATA(CS_N_BASE, 1); //置CS為高電平

IOWR_ALTERA_AVALON_PIO_DATA(ALE_BASE, 1); //置ALE為高電平

}

void sja1000_init(void)

{

unsigned char can_status;

IOWR_ALTERA_AVALON_PIO_DATA(RST_N_BASE, 0);

IOWR_ALTERA_AVALON_PIO_DATA(RST_N_BASE, 1);

write_sja1000(CAN_IER,0x00); //禁止CAN中斷

write_sja1000(CAN_MOD,0x09); //復(fù)位模式,單驗(yàn)收濾波器

can_status=read_sja1000(CAN_MOD); //讀CAN的模式寄存器

while((can_status&0x01)==0x00) //判斷是否進(jìn)入復(fù)位模式

{

write_sja1000(CAN_MOD,0x09); //復(fù)位模式,單驗(yàn)收濾波器

can_status = read_sja1000(CAN_MOD);

}

write_sja1000(CAN_CDR,0xC8); //peliCAN,禁止時(shí)鐘輸出

write_sja1000(CAN_ACR0,CAN_ACR0_CZ); //驗(yàn)收碼0

write_sja1000(CAN_ACR1,CAN_ACR1_CZ); //驗(yàn)收碼1

write_sja1000(CAN_ACR2,CAN_ACR2_CZ); //驗(yàn)收碼2

write_sja1000(CAN_ACR3,CAN_ACR3_CZ); //驗(yàn)收碼3

write_sja1000(CAN_AMR0,CAN_AMR0_CZ); //屏蔽碼0

write_sja1000(CAN_AMR1,CAN_AMR1_CZ); //屏蔽碼1

write_sja1000(CAN_AMR2,CAN_AMR2_CZ); //屏蔽碼2

write_sja1000(CAN_AMR3,CAN_AMR3_CZ); //屏蔽碼3

write_sja1000(CAN_BTR0,0x01); //同步跳轉(zhuǎn)3個(gè)周期,CAM系統(tǒng)時(shí)鐘=4倍晶振振蕩周期

總結(jié)

以上是生活随笔為你收集整理的fpga初始化错误_关于用FPGA对sja1000进行初始化的有关问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。