ARM - PIT이용 0.5초마다 하이퍼터미널에 숫자 적기
#include "ioarm.h"
//---------- 전력 제어 설정
#define PMC_PCER (*(volatile unsigned int *) 0xFFFFFC10)
/////////////////////////////////////////////////////////
#define MASTERCLOCK 48000000
//--------- 딜레이 함수
void Delayms(unsigned int ms)
{
volatile unsigned int count, countmax = (MASTERCLOCK / 10000) * ms;
for(count = 0; count < countmax; count++);
}
////////////////////////////////////////////
int num=0;
int led=0;
int cnt=0;
//변수 led를 하이퍼터미널에 숫자대로 송신하는 코드
void Hyperprint()
{
int i=0;
int cnum=0;
int knum;
knum=num;
while(knum!=0)
{
knum=knum/10;
cnum++;
}
for(i=cnum; i>=1; i--)
{
if(cnum==i-1)
{
DBGU_THR = (num/(pow(10,i)))+48;
Delayms(5);
}
else if(i==1)
{
DBGU_THR = (num%10)+48;
Delayms(5);
}
else
{
DBGU_THR = ((num%(int)(pow(10,i))/(pow(10,i-1))))+48;
Delayms(5);
}
}
}
void f_interrupt()
{
int status;
cnt++; //cnt 는 전역변수
if(cnt==3) //cnt==3 이면 500,000 * 3 = 1,500,000 이므로 0.5초가 된다
{
if(led==4)
{
PIO_CODR =1<<0 | 1<<1 | 1<<2 | 1<<3;
led =0;
}
else
{
PIO_SODR=1<<(led);
led++;
}
num++;
Hyperprint();
cnt=0;
}
status=PIT_PIVR; //PIVR을 읽어주면 클리어가 된다
}
int main(void)
{
PMC_PCER = 1<<2;
PIO_PDR = 1<<9 | 1<<10; //9,10번핀 병렬포트로 사용안함
PIO_ASR = 1<<9 | 1<<10; //통신을 위해 9,10번핀 장치 A로 허용
PIO_PER = 1<<0 | 1<<1 | 1<<2 | 1<<3; //led를 켜기위해 허용
PIO_OER = 1<<0 | 1<<1 | 1<<2 | 1<<3;//출력 허용
DBGU_CR = 1<<6; //송신부 동작 허용
DBGU_MR = 1<<11; //모드 설정
DBGU_BRGR = 26; //cd 값 26 = 보레이트 115200;
AIC_IECR = 1<<1; //인터럽트 허용
AIC_SMR[1] = 1<<5|1<<2; //인터럽트 모드 설정
AIC_SVR[1] = (unsigned int) f_interrupt;//vector에 함수주소
PIT_MR = 1<<24 | 1<<25 | 500000; //PIT 인터럽트 출력, pit인에이블, PIV 값 입력 = 500,000
while(1)
{
}
} // End Main....
'코스웨어 > 10년 스마트폰BSP' 카테고리의 다른 글
[BSP]업무일지-박동수-20100714 (1) | 2010.07.15 |
---|---|
[BSP]업무일지-서동준-20100713 (0) | 2010.07.15 |
[BSP]업무일지-강혜정-20100712 (0) | 2010.07.12 |
[BSP]업무일지 - 김강수 - 20100708 (0) | 2010.07.12 |
[BSP]업무일지-이상구-20100706 (0) | 2010.07.06 |
[bsp]업무일지_한경수_20100705 (0) | 2010.07.06 |
[BSP]업무일지-전현수-20100702 (0) | 2010.07.02 |
[BSP]업무일지-박노준-20100701 (0) | 2010.07.01 |