Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
#include const unsigned char sndData[/*sndDataSize*/] = { T2PWMH = 0; ++count; void initSound(void) // Настройка прерываний // Настройка PWM-выхода
0xe4, 0xe3, 0xe2, 0xdf, 0xdc, 0xd7, 0xd2, 0xcc, 0xc5, 0xbe,
0xb6, 0xad, 0xa4, 0x9a, 0x90, 0x87, 0x7d, 0x73, 0x69, 0x5f,
0x56, 0x4d, 0x45, 0x3d, 0x36, 0x2f, 0x2a, 0x25, 0x21, 0x1e,
0x1d, 0x1c, 0x1c, 0x1d, 0x1f, 0x22, 0x26, 0x2b, 0x30, 0x37,
0x3e, 0x46, 0x4e, 0x57, 0x61, 0x6a, 0x74, 0x7e, 0x88, 0x92,
0x9c, 0xa5, 0xae, 0xb7, 0xbf, 0xc6, 0xcd, 0xd3, 0xd8, 0xdc,
0xe0, 0xe2, 0xe3
};
#define sndDataSize sizeof(sndData)
unsigned int index = 0;
unsigned char count = 0;
unsigned char width;
#pragma interrupt
void isr_timer2(void)
{
width = sndData[index];
T2PWML = width;
if (count == 4)
{
count = 0;
++index;
if (index >= sndDataSize)
index=0;
}
}
{
T2CTL = 0x43; // PWM mode, Prescale 1, not enabled.
T2H = 0x00; // Стартовое значение
T2L = 0x01;
T2RH = 0x02; // Перегружаемое значение =(18432000/16000)/1=0х480
T2RL = 0x40;
T2PWMH = 0;
T2PWML = 1;
T2CTL = 0xC3; // enable, prescale=1, PWM
SET_VECTOR(TIMER2, isr_timer2);
IRQ0ENH = 0x80; // Приоритет прерывания: high
IRQ0ENL = 0x80;
PCADDR = 0x01; // Выбираем под-регистр "Data Direction"
PCCTL = 0x7F; // port C.7 - вывод
PCADDR = 0x02; // Выбираем Alternate Function
PCCTL = 0x80; // port C.7 - Alternate Function
PCADDR = 0x04; // Port C output control
PCCTL = 0x80; // Timer(PWM output) High Drive Enable
}
void main(void)
{
DI();
initSound();
EI();
for ( ; ; );
}
Ответы