본문 바로가기
코스웨어/14년 스마트컨트롤러

ARM

by 알 수 없는 사용자 2014. 11. 5.
728x90
반응형


ARM LED.zip

main . c

#include "AT91SAM7S256.h"

#include "LED.h"


#define MASTERCLOCK     48000000

#define DFT_DUTY 100

#define MAX_DUTY 800


void PWM3_DUTY(unsigned int uiDuty);

void PWM3_Init();

void Delay_ms(unsigned int ms)

{

volatile unsigned int count;

volatile unsigned int countmax = (MASTERCLOCK / 10000) * ms;

for(count = 0; count < countmax; count++);

}


int main(void)

{

volatile unsigned int uiCnt;

volatile unsigned int uiDuty;


PWM3_Init();

uiDuty = DFT_DUTY;

while(1)

{

for(uiCnt=0 ;200000 > uiCnt;++uiCnt);

PWM3_DUTY(uiDuty);

if( MAX_DUTY>uiDuty)

{

uiDuty = uiDuty +10;

}

else

{

uiDuty = DFT_DUTY;

}

}

}


void PWM3_Init()

{

*AT91C_PMC_PCER = (1<<(AT91C_ID_PWMC));

*AT91C_PIOA_PPUDR = AT91C_PA14_PWM3; // 풀업저항 OFF (PA14)

*AT91C_PIOA_BSR = AT91C_PA14_PWM3;

*AT91C_PIOA_PDR =  AT91C_PIO_PA14;

*AT91C_PWMC_MR = (1<<0) | (6 << 8) ; 

//              750000 / 30 | 48M / 64


*AT91C_PWMC_CH3_CMR = 0xB << 0 | (1<<9) ;

*AT91C_PWMC_CH3_CDTYR = DFT_DUTY;

// 설정된 값을 접할 경우 상태변화가 일어남

*AT91C_PWMC_CH3_CPRDR = MAX_DUTY;

// Y축의 범위

*AT91C_PWMC_ENA = AT91C_PWMC_CHID3;

}


void PWM3_DUTY(unsigned int uiDuty)

{

if( MAX_DUTY < uiDuty)

{

uiDuty = MAX_DUTY;

}

*AT91C_PWMC_CH3_CUPDR = uiDuty;

}


728x90