검색결과 리스트
글
[Tiva] TM4C MCU와 ECHO UART 통신
Tiva MCU를 활용하여 UART의 RX와 TX의 동작을 간단하게 확인할 수 있는 코드입니다.
MCU가 키보드로부터 입력받은 값을 다시 TX로 출력하는 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include <stdint.h> #include <stdbool.h> #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/debug.h" #include "driverlib/fpu.h" #include "driverlib/gpio.h" #include "driverlib/pin_map.h" #include "driverlib/rom.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include "utils/uartstdio.h" #ifdef DEBUG void __error__(char *pcFilename, uint32_t ui32Line) { } #endif void ConfigureUART(void) { ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); ROM_GPIOPinConfigure(GPIO_PA0_U0RX); ROM_GPIOPinConfigure(GPIO_PA1_U0TX); ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); UARTStdioConfig(0, 115200, 16000000); } int main(void) { unsigned char getChar; ROM_FPULazyStackingEnable(); ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2); ConfigureUART(); while (1) { GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2); SysCtlDelay(SysCtlClockGet() / 10 / 3); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0); SysCtlDelay(SysCtlClockGet() / 10 / 3); getChar = UARTCharGet(UART0_BASE); if(getChar=='\r'){ UARTCharPut(UART0_BASE, '\n'); UARTCharPut(UART0_BASE, '\r'); }else{ UARTCharPut(UART0_BASE, getChar); } } } |
위의 코드를 적용한 후 Port 통신을 실행하여 키보드로 값을 입력하면 그 값을 그대로 컴퓨터로 다시 전송하여 값을 출력한다.
'임베디드 > TI' 카테고리의 다른 글
[Tiva] Tiva C 기반의 MCU로 초음파센서 SRF-10 활용하기 (0) | 2014.09.12 |
---|---|
[CCS] The program generated is not compatible with any of the CPUs in your target configuration. (0) | 2014.08.28 |
[Tiva] I2CMasterDataGet() (0) | 2014.08.26 |
[Tiva] I2CMasterControl() (0) | 2014.08.25 |
[Tiva] tm4c 시리즈 MCU로 TextLCD(CLCD) 동작 (0) | 2014.08.21 |
설정
트랙백
댓글
글
[Tiva] I2CMasterDataGet()
uint32_t I2CMasterDataGet(uint32_t ui32Base)
설명 : I2C 통신을 통해 Slave로부터 받아온 값을 return값으로 받습니다.
uint32_t ui32Base
Slave와 통신을 했던 I2C의 Base Address를 설정합니다.
위 함수를 사용하기 위해 I2CMasterControl() 함수를 사용하에 Slave로부터 값을 받아야 합니다.
다음은 위의 함수를 실행하기 위한 코드와 그 결과입니다.
unsigned int rcv = 0;
ROM_I2CMasterSlaveAddrSet(I2C0_BASE, 0xE0 / 2, true);
ROM_I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);
rcv = ROM_I2CMasterDataGet(I2C0_BASE);
while (ROM_I2CMasterBusy(I2C0_BASE)) {
}
'임베디드 > TI' 카테고리의 다른 글
[CCS] The program generated is not compatible with any of the CPUs in your target configuration. (0) | 2014.08.28 |
---|---|
[Tiva] TM4C MCU와 ECHO UART 통신 (2) | 2014.08.27 |
[Tiva] I2CMasterControl() (0) | 2014.08.25 |
[Tiva] tm4c 시리즈 MCU로 TextLCD(CLCD) 동작 (0) | 2014.08.21 |
[Tiva]startup_ccs.c 파일에 외부 인터럽트 추가하기 (0) | 2014.08.09 |
설정
트랙백
댓글
글
[Tiva] I2CMasterControl()
void I2CMasterControl(uint32_t ui32Base, uint32_t ui32Cmd)
설명 : I2C 통신시 Master의 동작을 설정하는 함수입니다.
uint32_t ui32Base
I2C 통신을 하게 될 Master의 Base Address를 설정합니다.
uint32_t ui32Cmd
I2C 통신을 하게 될 Master가 하게 될 동작을 설정합니다. 이 인자의 경우 다음과 같은 값들을 입력하실 수 있습니다.
I2C_MASTER_CMD_SINGLE_SEND
I2C_MASTER_CMD_SINGLE_RECEIVE
I2C_MASTER_CMD_BURST_SEND_START
I2C_MASTER_CMD_BURST_SEND_CONT
I2C_MASTER_CMD_BURST_SEND_FINISH
I2C_MASTER_CMD_BURST_SEND_ERROR_STOP
I2C_MASTER_CMD_BURST_RECEIVE_START
I2C_MASTER_CMD_BURST_RECEIVE_CONT
I2C_MASTER_CMD_BURST_RECEIVE_FINISH
I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP
I2C_MASTER_CMD_QUICK_COMMAND
I2C_MASTER_CMD_HS_MASTER_CODE_SEND
이들 중 빈번하게 사옹되는 것으로 다음과 같은 값들이 있습니다.
I2C_MASTER_CMD_SINGLE_SEND
Master가 Slave에게 명령어를 전달하는 모드입니다.
I2C_MASTER_CMD_SINGLE_RECEIVE
Master가 Slave로부터 명령어를 전달받는 모드입니다.
I2C_MASTER_CMD_BURST_SEND_START
Master가 Slave에게 명령어를 전달하는 모드입니다. 위의 I2C_MASTER_CMD_SINGLE_SEND와 달리 바로 명령어를 전달하지 않고 일단 Slave에게 명령어를 전달하겠다는 설정만 합니다.
I2C_MASTER_CMD_BURST_SEND_CONT
위의 I2C_MASTER_CMD_BURST_SEND_START를 실행한 후 Slave에게 입력할 명령어를 전달합니다.
I2C_MASTER_CMD_BURST_SEND_FINISH
Slave에게 마지막 명령어를 전달한 후 I2C 통신을 종료합니다.
I2C_MASTER_CMD_BURST_RECEIVE_START
I2C_MASTER_CMD_BURST_RECEIVE_CONT
I2C_MASTER_CMD_BURST_RECEIVE_FINISH
Master가 Slave로부터 명령어를 전달받는 모드로 SINGLE모드와 BURST 모드의 차이는 위의 SEND와 유사합니다.
다음은 SINGLE 모드와 BURST 모드로 I2C통신시 파형을 나타냅니다.
SINGLE_SEND
ROM_I2CMasterSlaveAddrSet(I2C0_BASE, 0xE0 / 2, false);
ROM_I2CMasterDataPut(I2C0_BASE, 0x7E);
ROM_I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);
while (ROM_I2CMasterBusy(I2C0_BASE)) {
}
BURST_SEND
ROM_I2CMasterSlaveAddrSet(I2C0_BASE, 0xE0 / 2, true);
ROM_I2CMasterDataPut(I2C0_BASE, 0x02);
ROM_I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START);
while (ROM_I2CMasterBusy(I2C0_BASE)) {
}
ROM_I2CMasterDataPut(I2C0_BASE, 0xFF);
ROM_I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);
while (ROM_I2CMasterBusy(I2C0_BASE)) {
}
'임베디드 > TI' 카테고리의 다른 글
[Tiva] TM4C MCU와 ECHO UART 통신 (2) | 2014.08.27 |
---|---|
[Tiva] I2CMasterDataGet() (0) | 2014.08.26 |
[Tiva] tm4c 시리즈 MCU로 TextLCD(CLCD) 동작 (0) | 2014.08.21 |
[Tiva]startup_ccs.c 파일에 외부 인터럽트 추가하기 (0) | 2014.08.09 |
[Tiva] I2CMasterSlaveAddrSet() (0) | 2014.08.01 |