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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

三 s5p4418对mcp2515 can总线的支持

發(fā)布時(shí)間:2024/9/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三 s5p4418对mcp2515 can总线的支持 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對(duì)于mcp2515的移植相關(guān)知識(shí)課先參考這里http://blog.csdn.net/sno_guo/article/details/17029295


下面是針對(duì)s5p4418官方提供的內(nèi)核為基礎(chǔ)做的相關(guān)修改。

對(duì)于2515的驅(qū)動(dòng)我們不用關(guān)心,直接使用內(nèi)核自帶的即可。首先我們需要對(duì)內(nèi)核的配置做添加,具體如下面的圖所示:




務(wù)必確保內(nèi)核的配置中上面圖片的選擇是被打開的,免得做其他工作時(shí)造成未知的問題。


下面是修改板級(jí)目錄下device.c的文件,找到下面的代碼,并修改成如下所示:

/*------------------------------------------------------------------------------* SSP/SPI*/ #if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE) #include <linux/spi/spi.h> #include <linux/can/platform/mcp251x.h> static void spi0_cs(u32 chipselect) {//printk("ERTER:%s ......\n",__func__); #if (CFG_SPI0_CS_GPIO_MODE)if(nxp_soc_gpio_get_io_func( CFG_SPI0_CS )!= nxp_soc_gpio_get_altnum( CFG_SPI0_CS))nxp_soc_gpio_set_io_func( CFG_SPI0_CS, nxp_soc_gpio_get_altnum( CFG_SPI0_CS));nxp_soc_gpio_set_io_dir( CFG_SPI0_CS,1);nxp_soc_gpio_set_out_value( CFG_SPI0_CS , chipselect); #else; #endif } struct pl022_config_chip spi0_info = {/* available POLLING_TRANSFER, INTERRUPT_TRANSFER, DMA_TRANSFER */.com_mode = CFG_SPI0_COM_MODE,.iface = SSP_INTERFACE_MOTOROLA_SPI,/* We can only act as master but SSP_SLAVE is possible in theory */.hierarchy = SSP_MASTER,/* 0 = drive TX even as slave, 1 = do not drive TX as slave */.slave_tx_disable = 1, .rx_lev_trig = SSP_RX_4_OR_MORE_ELEM,.tx_lev_trig = SSP_TX_4_OR_MORE_EMPTY_LOC,.ctrl_len = SSP_BITS_8,.wait_state = SSP_MWIRE_WAIT_ZERO,.duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX,/** This is where you insert a call to a function to enable CS* (usually GPIO) for a certain chip.*/ #if (CFG_SPI0_CS_GPIO_MODE).cs_control = spi0_cs, #endif.clkdelay = SSP_FEEDBACK_CLK_DELAY_1T,}; void s5p4418_mcp2515_init(void) {printk("ERTER:%s ......\n",__func__);nxp_soc_gpio_set_io_func(PAD_GPIO_C+ 30, 0); nxp_soc_gpio_set_io_func(PAD_GPIO_C+ 29, 1); nxp_soc_gpio_set_io_func(PAD_GPIO_D+ 0, 1); nxp_soc_gpio_set_io_func(PAD_GPIO_C+ 31, 1); nxp_soc_gpio_set_io_func(PAD_GPIO_B+ 6, 0); } static struct mcp251x_platform_data mcp251x_info = {.oscillator_frequency = 20 * 1000 * 1000,.board_specific_setup = &s5p4418_mcp2515_init,.power_enable = NULL,.transceiver_enable = NULL, }; static struct spi_board_info spi_plat_board[] __initdata = { #ifdef CONFIG_CAN_MCP251X[0] = {.modalias = "mcp2515", /* fixup */.max_speed_hz = 1 * 1000 * 1000, /* max spi clock (SCK) speed in HZ */.bus_num = 0, /* Note> set bus num, must be smaller than ARRAY_SIZE(spi_plat_device) */.chip_select = 0, /* Note> set chip select num, must be smaller than spi cs_num */.controller_data = &spi0_info,.mode = SPI_MODE_0,.platform_data = &mcp251x_info,.irq = PB_PIO_IRQ(CFG_IO_CAN_DETECT),}, #else[0] = {.modalias = "spidev", /* fixup */.max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */.bus_num = 0, /* Note> set bus num, must be smaller than ARRAY_SIZE(spi_plat_device) */.chip_select = 0, /* Note> set chip select num, must be smaller than spi cs_num */.controller_data = &spi0_info,.mode = SPI_MODE_3 | SPI_CPOL | SPI_CPHA,}, #endif };#endif
相對(duì)于源碼主要做的修改是:

1.spi_plat_board結(jié)構(gòu)體增加了對(duì)mcp2515的定義

2.添加mcp251x_info結(jié)構(gòu)定義

3.添加void s5p4418_mcp2515_init(void)函數(shù)

這里說明一下void s5p4418_mcp2515_init(void)函數(shù)的意義,該函數(shù)是對(duì)SPI0的GPIO做了配置,在默認(rèn)的情況下SPI0的GPIO不一定為SPI的功能,所以這里務(wù)必需要重新配置一下(由于開始沒注意,導(dǎo)致了無法初始化的問題),當(dāng)然這個(gè)配置工作也可以在其他的地方做。


CFG_IO_CAN_DETECT這個(gè)定義是在板級(jí)目錄的include目錄下cfg_main.h文件中,這里定義的是GPIOB6引腳。


做了上面的配置之后初始化就應(yīng)該沒有問題了。

使用ifconfig can0 up進(jìn)行檢測(cè),如果不報(bào)錯(cuò)那么與mcp2515的通信是沒有問題了。

剩下的就可以使用ip、candump等命令進(jìn)行 can操作了。

希望對(duì)移植can遇到問題的朋友有所幫助。

總結(jié)

以上是生活随笔為你收集整理的三 s5p4418对mcp2515 can总线的支持的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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