Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Скажите вот есть таймер0 у PIC18. Период переполнения/прерывания 1ms. Я хочу внутри обработчика поместить функцию, которая отправит и одновременно получит 4 байта. Скорость SPI достаточна для того чтоб передать 20 байт в течении 1ms.

Отправлено Двоешник (92.240.98.10) 11 января 2011, г. 18:07



...
IPEN = 1; /* Включаем приоритетную систему прерываний */
GIEH = 1; /* Разрешаем прерывания высокого уровня */
GIEL = 1; /* Разрешаем прерывания низкого уровня */
TMR0IP = 0; /* Устанавливаем низкий приоритет таймеру 0 */
TMR0IE = 1; /* Разрешаем прерывание от таймера 0 */

T0CON &= 0x00;
T08BIT = 1;
TMR0ON = 1;
T0PS0 = 1;
...
void SPI_Led_Key ( void ) {

CLR_PL();
SET_PL();

Array_Keys[0] = SPIRWChar(Array_Leds[0]);
Array_Keys[1] = SPIRWChar(Array_Leds[1]);
Array_Keys[2] = SPIRWChar(Array_Leds[2]);
SPIRWChar(Array_Leds[3]);

SET_ST_CP();
CLR_ST_CP();

}
...
void SPIHardInit(CHAR mode, CHAR speed){



TRISC3 = 0;
TRISC4 = 1;
TRISC5 = 0;

switch (mode)
{
case SPI_MODE0 : CKP = 0; CKE = 1; break;
case SPI_MODE1 : CKP = 0; CKE = 0; break;
case SPI_MODE2 : CKP = 1; CKE = 1; break;
case SPI_MODE3 : CKP = 1; CKE = 0; break;
}

SMP = 0;
speed &= 0x0F;
SSPCON1 = (SSPCON1 & 0xF0) | speed;
SSPEN = 1;
SSPIP = 1; /* Установка высокого приоритета прерывания от SPI */
SSPIE = 1;
}

INT08U SPIRWChar(INT08U spi_out) {

SSPBUF = spi_out;
while (!SPI_FLAG);
SPI_FLAG = 0;

return SSPBUF;
}
...

void interrupt my_high_isr(void) { /* Функция высокого уровня прерывания */

if ((SSPIE)&&(SSPIF)) { /* Проверка флагов прерывания от SPI */
SSPIF=0;
SPI_FLAG=1;
}
}


void interrupt low_priority my_low_isr(void) { /* Функция низкого уровня прерывания */

if ((TMR0IE)&&(TMR0IF)) { /* Проверка флагов прерывания от таймера */
TIMER0_TC++;
TMR0IF=0;
SPI_Led_Key();
}
}



Программа затыкается ожидая SPI_FLAG,шо делать? Спасибо!


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 85:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru