我就進到 pmon 源碼的 pmon-loongson3/Targets/LS2K/conf 路徑下,使用命令 cp LS2K.dts LS2K.dts_back備份一下設備樹文件,如下圖所示:![]() 接著我們使用命令 vim LS2K.dts 打開設備樹文件,找到 can0 和 can1 的設備節點,可以發現,在 BSP 里面已經默認配置好了,不需要我們在額外配置,如下圖所示: ![]() 接著我們來配置引腳的復用關系,通過 LS2K1000 的數據手冊,可知地址 0x1fe10420 的第 16 到 17 位配置的是 can 引腳的復用關系,如下圖所示: ![]() 通過上表可知,如果我們要把 GPIO 設置為 CAN 功能,我們需要將 16 到 17 位設置為 1,我們可以直 接在 pmon 里面操作這個寄存器,比如使用在 Targets/LS2K/ls2k/tgt_machdep.c 文件中增加代碼(volatile int *)0xbfe10420 |=(2<<16)將這倆位設置為 1,但是在 pmon 的 bsp 里面這些工作已經給我們做好了,只不過是沒有編譯進去而已。 在 Targets/LS2K/ls2k/tgt_machdep.c 文件的第 464 行使用了宏定義 PAI2 來決定包不包含 pai2.c 文件,如下圖所示: ![]() pai2.c 文件在路徑 Targets/LS2K/ls2k/pai2.c 下,這個文件里面通過宏定義 SEL_CAN 來對 CAN 的管腳復用進行了配置,如下圖所示: ![]() 所以我們是不是就不用在自己單獨來添加代碼了呢,我們只需要加上這 PAI2 和 SEL_CAN 這來個宏定義即可,我們打開 Targets/LS2K/conf/ls2k 文件,取消注釋 option PAI2 并增加宏定義 option SEL_CAN,如下圖所示: ![]() 然后我們重新編譯 pmon 源碼并燒寫到開發板上,使用命令 devmem 0x1fe10420 來查看有沒有成功將這倆個管腳的復用設置成 can,如下所示: ![]() 將 0x00131D49 換算成 2 進制,可以發現 16 到 17 位已經成功設置成了 1,所以這倆個 GPIO 已經成功被設置成 CAN。接著我們就可以參考手冊 3.2.7 章節來測試開發板的 CAN 功能了。 更多內容可關注北京迅為2K1000開發板 ![]() |