2018年1月17日更新:
這幾天用了創龍的C6748的庫,對於GPIO配置十分不爽,我移植了RK6748的庫,用起來十分酸爽,把下面的文件加入到工程中,然后include頭文件后就可以使用。非常好使。
鏈接:https://pan.baidu.com/s/1c2RVBOW 密碼:umra
以下文章都是基於這個庫的。
請配置后使用!
以下是原文:
這幾天做項目,用到了TMS320C6748這個DSP,用的是ROCK的板子,要驅動RF24L01,用的是模擬SPI時序,對於GPIO口的配置弄了好久,終於弄清楚了。C6748好像不像是C5509A一樣有統一的CSL庫文件,只在他的Demo板中提供了編程的簡單的庫,我后來也沒移植官方Demo的庫,直接使用的ROCK板子提供的第三方庫(可能是板子的廠家自己改裝的Demo里面的庫)。廢話不多說了。進入正題。
1->GPIO口接線方式
2-> GPIO口配置
2.1->MUX寄存器配置
GPIO口C6748一個引腳可能復用四五個功能,所以這個地方配置有點說道,跟一般的嵌入式設備不同。看初始化GPIO的例程:
void GPIO_INIT( void ) { RK6748_pinmuxConfig(13,0x80088808,0x80088808); RK6748_pinmuxConfig(18,0x00800000,0x00800000); RK6748_pinmuxConfig(19,0x00800000,0x00800000);
GPIO_setDir( GPIO_BANK6, GPIO_PIN13, GPIO_INPUT ); // IRQ GPIO_setDir( GPIO_BANK6, GPIO_PIN15, GPIO_OUTPUT ); // MOSI GPIO_setDir( GPIO_BANK6, GPIO_PIN1, GPIO_OUTPUT ); // CSN GPIO_setDir( GPIO_BANK6, GPIO_PIN11, GPIO_INPUT ); // MISO GPIO_setDir( GPIO_BANK6, GPIO_PIN12, GPIO_OUTPUT ); // SCK GPIO_setDir( GPIO_BANK0, GPIO_PIN8, GPIO_OUTPUT ); // CE printf("GPIO initi finish! \n"); }
主要就是前三句RK6748_pinmuxConfig()這個函數是對功能寄存器的配置,研究了好久,資料也沒說這塊,看了好幾個文檔。最后自己研究出來了。
配置GPIO口先調用RK6748_pinmuxConfig(Uint32 reg, Uint32 in_mask, Uint32 val);三個參數。這三個參數的值需要運行Pin Mux Ultility工具軟件獲得。如圖4.5所示為Pin Mux Ultility軟件界面。
圖4.5 Pin Mux Utility軟件界面
如圖4.5中兩個紅框,在紅框內選擇我們要使用GPIO口,在本設計中如圖3.1b所示連線圖,驅動RF24L01用到了IO6_13,IO6_15,IO0_2,IO6_11,IO6_12,IO6_11, IO6_12,IO0_8,這些引腳和RF24L01的IRQ,MOSI,CSN,MISO,SCK,CE信號線和數據線相連。則需要在Pin Mux Utility軟件中使能這些IO口。圖中4.5中在1處選擇DSP信號,然后在2處選擇上述提到的GPIO口,雙擊后使能,背景會如圖中變綠,在3處查看寄存器值,這些寄存器值就是編程時需要用到的,分別是PINMUX0:0x800000000,PINMUX1:0x008000000,PINMUX13:0x0088808,在配置DSP的IO引腳的MUX寄存器時,輸入以下參數:
RK6748_pinmuxConfig(0, 0x8000000000, 0x8000000000);
RK6748_pinmuxConfig(1, 0x00800000, 0x00800000);
RK6748_pinmuxConfig(13, 0x0088808, 0x0088808);
完成GPIO口的使能配置。
之后通過GPIO_setDir( GPIO_BANK6, GPIO_PIN13, GPIO_INPUT ); 語句配置GPIO口的方向,上述語句是配置IO6_13為輸入方向,同理對其他引腳進行操作也是按照這個語句稍作修改。
附帶這個軟件的下載地址:http://download.csdn.net/detail/u014281970/9824202