2022. 1. 28. 17:55ㆍ전공공부/마이크로프로세서 윈터캠프
성균관대학교 윈터캠프 <마이크로프로세서 - 전재욱 교수님>에서 실습한 내용 중 일부다.
Renesas RA6M3(176 pin) 계열의 칩을 선택했다. 그리고 IDE는 E2 studio를 활용했다.
LED 제어
- pin configuration
회로에 따르면 LED는 핀이 각각 PA08, PA09, PA10, PB00으로 구성되어 있다.
그래서 다음과 같이 구성한다.

Symbolic name을 지정한다면 저절로 코드로 define해주고, 쉽게 코드를 작성하도록 도와준다. 그리고 mode를 output mode(initial Low)로 바꾼다.
- 코드
void R_USP_InitLed4()
{
R_PORT10->PDR = 0x0700;
R_PORT11->PDR = 0x0001;
R_PORT10->PODR = 0x0000;
R_PORT11->PODR = 0x0000;
}
LED_init을 다음과 같이 작성한다. PDR register는 direction으로 0은 input, 1은 output이다. 그래서 사용하는 pin만 1로 표시하고 나머지는 0으로 설정했다. PODR register는 output data로 0은 LOW를 1은 HIGH(3.3V)를 제공한다. 그래서 초기 상태가 LED가 ON이다. (여기 회로도에서는 LOW여야 전류가 흘러 LED가 켜진다)
void R_USP_SetLedOn(int led, bool state_)
{
if(state_ == true)
{
// 0이 켜진거, 1이 안켜진거
switch(led)
{ // or을 취하면 0 | 1 = 1, 나머지는 1 | 0 = 1 꺼진다.
case 0 :
testLevel = (uint16_t)(0x0001 << 8);
R_PORT10->PODR |= testLevel; // 8th
break;
case 1 :
testLevel = (uint16_t)(0x0001 << 9);
R_PORT10->PODR |= testLevel; // 9th
break;
case 2 :
testLevel = (uint16_t)(0x0001 << 10);
R_PORT10->PODR |= testLevel; // 10th
break;
case 3 :
testLevel = (uint16_t)(0x0001 << 0);
R_PORT11->PODR |= testLevel; // 11th
break;
}
}
else // state = 1
{
switch(led)
{ // and를 취하면 1&0 = 0, 나머지는 1&1 = 1 켜진다
case 0 :
testLevel = (uint16_t)~(0x0001 << 8);
R_PORT10->PODR &= testLevel;
break;
case 1 :
testLevel = (uint16_t)~(0x0001 << 9);
R_PORT10->PODR &= testLevel;
break;
case 2 :
testLevel = (uint16_t)~(0x0001 << 10);
R_PORT10->PODR &= testLevel;
break;
case 3 :
testLevel = (uint16_t)~(0x0001 << 0);
R_PORT11->PODR &= testLevel;
break;
}
}
}
위의 함수를 사용하면 state가 true면 꺼지게 하고, false면 켜지게 한다. 그리고 각 케이스에 따라 특정 LED를 키고 끈다.
// 이외에도 portwrite, pinwrite하는 방법이 있다.
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_08, BSP_IO_LEVEL_LOW);
R_IOPORT_PortWrite(&g_ioport_ctrl, BSP_IO_PORT_10, (ioport_size_t)(0x0001 << 8), (ioport_size_t)0x0700);// each digit
이외에도 위와 같이 pinwrite이나 portwrite를 활용해 LED output을 제어 가능하다.
'전공공부 > 마이크로프로세서 윈터캠프' 카테고리의 다른 글
RENESAS - DAC, audio conversion (0) | 2022.02.02 |
---|---|
RENESAS - 실습1 (0) | 2022.02.02 |
RENESAS - AGT timer 설정 (0) | 2022.01.28 |
RENESAS - 버튼 설정(Interrupt) (0) | 2022.01.28 |
RENESAS - 7 segment(FND) 제어 (0) | 2022.01.28 |