ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
14630 Топик полностью
zyn (16.09.2004 16:25, просмотров: 1) ответил MALLOY на Ответ: Опять код испорчен, ведать форматирование какоето пришли на почту или в аську #144967306
На какой ящик? Код повторно... 

#include 
#include 
#include "PLL_calc.h"

// инициализация Таймера 0 
-----------------------------------------------------------------
void InitTimer()
{
  T0TCR = 0x0;
  T0PC  = 0x0;          // частота периферии (27 647 000 Гц)  
  T0MR0 = 55295000;     // устанавливаем 2 секунды 
  T0TC  = 0x0;       
  T0MCR = 0x3;          // разрешаем прерывание и пересброс от MR0
}

// инициализация PLL------------------------
void InitPLL()
  {          
  PLLCFG= PLLCFGVAL;           // the value is pre-calculated  in 
                               // PLL_calc.h
  PLLCON= 0x3;                 // enable and connect
  PLLFEED=0xAA;                // PLL Feed Sequence
  PLLFEED=0x55;                // PLL Feed Sequence
                               
  VPBDIV = 0x2;               // частота периферии в два раза  
                              // меньше частоты проца
  }

// инициализация ног на вывод-------------
void InitGPIO ()
{
  // выводы Р04.5.6.7
 IODIR = 0xF0;  // выводы P04,5,6,7 установлены на вывод
}

// обработчик прерывания-------------
 __irq __arm void IRQHandler0 (void)
{
       IOSET = 0x20;
       for (int j=1; j<600000; j++) {};
       IOCLR = 0x20; 
       T0IR = 0x1;
       VICVectAddr = 0xFF;
 }

// инициализация Контроллера прерываний----
void InitVIC ()
{
    VICProtection = 0x1;
    VICIntSelect = 0x0;        // прерывание классифицировано как 
                               // IRQ (по умолчанию)
    VICIntEnable = 0x10;       // разрешение прерывания от канала 
                               // 4 (таймер 0) 
    VICVectCntl4 = 0x24;       // классифицировал преравание от 
                               // 4 канала как IRQ и разрешил его
                               // в слоте 4 VIC
    VICVectAddr = 0x0;
    VICVectAddr4 = (unsigned int) IRQHandler0;
    VICProtection = 0x0;
}

//------------------------------------------
int main (void)
{
   InitPLL();
   InitGPIO();
   InitTimer();
   InitVIC();
 
   IOSET = 0x80;          // зажигаем ногу 7
   T0TCR=0x1;             //запуск таймера0
  
   while (1) {     
   
              for (int j=1; j<500000; j++) {};
              IOSET = 0x40;
              for (int j=1; j<500000; j++) {};
              IOCLR = 0x40;
             // if(VICVectAddr == (unsigned int)IRQHandler0)
             // {
             // if (IOPIN&0x10)IOCLR = 0x10; else IOSET = 0x10;   
             // T0IR = 0x1;
             // VICVectAddr = 0xFF;
             //  }     
              }
      
}