본문 바로가기

ARM7

arm 7 시리얼 통신 하이퍼 터미널로 켬끔 날리기.



#include "AT91SAM7S256.h"
#include "lib_AT91SAM7S256.h"
#include "OK7S256ads.h"

#define DBGU_SR (*(volatile unsigned int *) 0xFFFFF214)
#define DBGU_RHR (*(volatile unsigned int *) 0xFFFFF218)
#define DBGU_THR (*(volatile unsigned int *) 0xFFFFF21C)
#define DBGU_MR (*(volatile unsigned int *) 0xFFFFF204)
#define DBGU_BRGR (*(volatile unsigned int *) 0xFFFFF220)
#define DBGU_CR (*(volatile unsigned int *) 0xFFFFF200)
#define PIO_ASR (*(volatile unsigned int *) 0xFFFFF470)
#define PIO_BSR (*(volatile unsigned int *) 0xFFFFF474)
#define PIO_PDR (*(volatile unsigned int *) 0xFFFFF404)
#define PIO_SODR (*(volatile unsigned int *) 0xFFFFF430)
#define PIO_CODR (*(volatile unsigned int *) 0xFFFFF434)
#define PIO_OER (*(volatile unsigned int *) 0xFFFFF410)
#define PIT_MR (*(volatile unsigned int *) 0xFFFFFD30)
#define AIC_SVR ((volatile unsigned int *) 0xFFFFF080)
#define AIC_SMR ((volatile unsigned int *) 0xFFFFF000)
#define AIC_IDCR (*(volatile unsigned int *) 0xFFFFF124)
#define AIC_ICCR (*(volatile unsigned int *) 0xFFFFF128)
#define AIC_IECR (*(volatile unsigned int *) 0xFFFFF120)
#define PMC_PCER (*(volatile unsigned int *) 0xFFFFFC10)

volatile unsigned int PIT_count=0;
volatile unsigned int PIT_flag = 0;


 void Delayms(unsigned int ms) //딜레이 함수..
{
  volatile unsigned int count, countmax = (48000000 / 10000) * ms;

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

unsigned int DBGU_RX_char(void)   
{
 while(!(DBGU_SR & 0x0001));  // wait until RXRDY=1
 return DBGU_RHR;   // receive a character
}

void DBGU_TX_char(unsigned int data)  
{
 while(!(DBGU_SR & 0x0002));  // wait until TXRDY=1
 DBGU_THR = data;   // transmit a character
}

void DBGU_string(char *string)
{
 while(*string != '\0')
 {
  DBGU_TX_char (*string);
  string++;
 }

void PIT_ISR(void)
{
 AT91F_PITGetPIVR(AT91C_BASE_PITC);
 
 PIT_count++;
 
 if(PIT_count<10)
  return;
  
 PIT_count = 0;
 PIT_flag ^= 0x01;
 
 if(PIT_flag == 1)
 {
  PIO_SODR = 0x00000007;
  DBGU_string("켬"); 
 }
 else
 {
  PIO_CODR = 0x00000007;
  DBGU_string("끔");
 }
}

int main(void)
{
 PIO_OER = 0x00000FFF;
 PMC_PCER =(unsigned int)1 << (unsigned int)1;
 
 PIO_ASR = ((unsigned int)1<<10| (unsigned int)1<<9);
 PIO_BSR = 0;
 PIO_PDR = ((unsigned int)1<<10 | (unsigned int)1<<9); // Set in Periph mode

 DBGU_MR = 0x00000800;   // normal mode, no parity
 DBGU_BRGR = 26;   // MCK/16/26 = 115200 bps
 DBGU_CR = 0x00000150;   // TX, RX enable 
 
 //AT91F_PITC_CfgPMC();
 
 AT91F_PITInit(AT91C_BASE_PITC,200000,48);
 
 //PIT_MR = period? (period * pit_frequency + 8) >> 4 : 0;
 //PIT_MR |= (unsigned int) 0x1 << 24);

 
 AT91F_PITSetPIV(AT91C_BASE_PITC,600000-1);
 
 AT91F_PITEnableInt(AT91C_BASE_PITC);

 //AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_SYS, 7, 1, PIT_ISR);

  AIC_IDCR  = 0x1 << (unsigned int) 1;
    AIC_SVR[1] = (unsigned int)PIT_ISR;   //이부분은 배열이라서 선언할때 조심!!!!!!
    AIC_SMR[1] = 7;       //이부분은 배열이라서 선언할때 조심!!!!!!
    AIC_ICCR = 0x1 << (unsigned int) 1;

 
 //AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SYS);
 
 AIC_IECR = 0x1 <<  (unsigned int)  1;

 while(1);


}