CC 1310ダイレクトオペレーションレジスタプログラミング
2243 ワード
公式CC 13 x 0が提供する駆動は、シリアルポート送信関数のような複数のデバイスとオペレーティングシステムを互換化するために抽象的である.
レジスタをどのように操作するかは簡単にはわかりませんが、この方法のドライバファイルは.../source/ti/driverディレクトリの下にあります.
次に,シリアル送受信関数の開発過程を通して,レジスタを直接操作するという最下層の方法でプログラム開発を行う方法を説明する.
1.レジスタ定義ヘッダファイル
SDKが提供するレジスタ定義は.../source/ti/devices/cc 13 x 0/incディレクトリの下にあるヘッダファイルの山に置かれていますhw_memmap.hファイルには、各周辺機器のベースアドレスが定義されています.たとえば、次のようにします.
各周辺機器に対応するヘッダファイルには、hw_などの各レジスタのオフセットアドレスが定義されているuart.hで定義されています
2.レジスタ読み書き
hw_types.hではレジスタの読み書き関数を定義しています
3.シリアルポートの自発的な完全なサンプルコードは以下の通りです.
int_fast32_t UART_write(UART_Handle handle, const void *buffer, size_t size)
{
return (handle->fxnTablePtr->writeFxn(handle, buffer, size));
}
レジスタをどのように操作するかは簡単にはわかりませんが、この方法のドライバファイルは.../source/ti/driverディレクトリの下にあります.
次に,シリアル送受信関数の開発過程を通して,レジスタを直接操作するという最下層の方法でプログラム開発を行う方法を説明する.
1.レジスタ定義ヘッダファイル
SDKが提供するレジスタ定義は.../source/ti/devices/cc 13 x 0/incディレクトリの下にあるヘッダファイルの山に置かれていますhw_memmap.hファイルには、各周辺機器のベースアドレスが定義されています.たとえば、次のようにします.
#define UART0_BASE 0x40001000 // UART
各周辺機器に対応するヘッダファイルには、hw_などの各レジスタのオフセットアドレスが定義されているuart.hで定義されています
#define UART_O_CTL 0x00000030
2.レジスタ読み書き
hw_types.hではレジスタの読み書き関数を定義しています
// Word (32 bit) access to address x
// Read example : my32BitVar = HWREG(base_addr + offset) ;
// Write example : HWREG(base_addr + offset) = my32BitVar ;
#define HWREG(x) \
(*((volatile unsigned long *)(x)))
3.シリアルポートの自発的な完全なサンプルコードは以下の通りです.
HWREGB(PRCM_BASE+PRCM_O_UARTCLKGR)=1; //UARTCLKGR
HWREGB(PRCM_BASE+PRCM_O_UARTCLKGS)=1; //UARTCLKGS
HWREGB(PRCM_BASE+PRCM_O_UARTCLKGDS)=1; //UARTCLKGDS
while(!(HWREGBITW(PRCM_BASE+PRCM_O_PDSTAT0,PRCM_PDSTAT0_SERIAL_ON_BITN))){
HWREGBITW(PRCM_BASE+PRCM_O_PDCTL0,PRCM_PDCTL0_SERIAL_ON_BITN) =1;//SERIAL ON
}
HWREGBITW(PRCM_BASE+PRCM_O_CLKLOADCTL,PRCM_CLKLOADCTL_LOAD_BITN) =1;//LOAD ENABLE
//IOC
HWREG(IOC_BASE+IOC_O_IOCFG2) =0x2000600F;
HWREG(IOC_BASE+IOC_O_IOCFG3) =0x00006010;
//UART
//HWREGBITW(UART0_BASE+UART_O_CTL,UART_CTL_UARTEN_BITN) =0;
HWREGB(UART0_BASE+UART_O_CTL) =0;
HWREGH(UART0_BASE+UART_O_IBRD) =0x1A;
HWREGB(UART0_BASE+UART_O_FBRD) =0x3;
HWREGB(UART0_BASE+UART_O_LCRH) =0x70;
HWREGH(UART0_BASE+UART_O_CTL) =0x0301;
/* Loop forever echoing */
while (1) {
if(HWREGBITB(UART0_BASE+UART_O_FR,4) == 0) {
input[0] = HWREGB(UART0_BASE);
HWREGB(UART0_BASE) = input[0];
}