PD0-13
PD1-14
PD2-15
PD3-16
PD4-14
PD5-15
PD6-29
PD7-11
MCU-due board
--------------------------------------
//아두이노에서 제공하는 라이브러리를 사용하지 않고 레지스터를 조작하는 고전적인 방법으로
//아두이노 듀에의 특정 핀을 입/출력으로 설정한다.
int data_in;
char str[64];
void BitOutput();
void ReadAndWrite();
void setup()
{
Serial.begin(115200);
PMC->PMC_PCER0=1u<<ID_PIOD; //PIOD로 가는 클럭을 ENABLE한다.
//ID_PIOD는 14이다.
//pmc_enable_perich_clk(ID_PIOD);//다음과 같은 방식으로 함수를 이용해 활성화할 수도 있다
PIOD->PIO_PER=0x000000FF; //PD0~7 enable
PIOD->PIO_IDR=0x000000FF; //interrupt disable
PIOD->PIO_IFER=0x0000000F; //input glitch filter enble register
PIOD->PIO_ODR=0x0000000F; //PD 0~3 입력으로 설정
PIOD->PIO_OER=0x000000F0; //PD 4~7 출력으로 설정
PIOD->PIO_OWER=0x000000F0; //PIO_ODSR에 데이터를 직접 쓸 수 있게 함.
PIOD->PIO_ODSR=0x00000000; //모든 출력을 0으로 맞춤
}
void loop()
{
BitOutput();
ReadAndWrite();
}
//비트단위로 데이터를 출력한다.
//비트단위로 데이터를 조작할 경우 다음의 두 레지스터를 이용하게 된다.
//PIO_CODR-32비트 레지스터의 해당비트에 1을 쓰면 SET된다.
//PIO_SODR-해당 비트에 1을 쓰면 CLEAR된다.
void BitOutput()
{
while(1)
{
PIOD->PIO_CODR=0x000000F0; //P3~7번에 HIGH를 출력한다
delay(1000);
PIOD->PIO_SODR=0x000000F0; //P3~7번에 LOW를 출력한다
delay(1000);
}
}
//WORD단위로 값을 쓸 경우, PIO_ODSR 레지스터를 이용한다.
//PIO_ODSR을 이용할 경우, PIO_OWER레지스터를 이용해 해당 비트를 out put write enable시켜야한다.
void ReadAndWrite()
{
while(1)
{
data_in = PIOD->PIO_PDSR & 0x000000FF;// PIOD를 읽어 들인 후 하위 4bit를 masking 한다.
sprintf(str, "data_in=%x\n", data_in);//결과를 시리얼모니터로 출력한다
Serial.print(str);
delay(100);
}
}
'Programming > Embedded' 카테고리의 다른 글
[Arduino Due]-basic timer interrupt code (0) | 2022.02.18 |
---|---|
[Arduino Due]-basic pin change interrupt code (0) | 2022.02.18 |
간단한 센서값 필터링(filtering) 예제코드 (0) | 2022.02.18 |
아두이노 듀에 MCU의 사양 (0) | 2022.02.18 |
MIDI OUT 회로도 (0) | 2022.02.18 |