250
{
return RI;
}
/*--------------------------------------------------------------------
wsio
----------------------------------------------------------------------
Отправляет символ по последовательному каналу
Вход: unsigned char c - символ, который нужно отправить
Выход: нет
Результат: нет
------------------------------------------------------------------- */
void wsio( unsigned char c )
{
SBUF = c;
TI = 0;
while( !TI );
}
/*--------------------------------------------------------------------
rsio
----------------------------------------------------------------------
Дожидается приема символа из последовательного канала и возвращает его.
Вход: нет
Выход: нет
Результат: принятый символ
------------------------------------------------------------------- */
unsigned char rsio(void)
{
while( !RI );
RI = 0;
return SBUF;
}
/*--------------------------------------------------------------------
type
----------------------------------------------------------------------
Выводит ASCIIZ-строку в последовательный канал
Вход: char *str - указатель на строку
Выход: нет
Результат: нет
------------------------------------------------------------------- */
void type(char * str)
{
while( *str ) wsio( *str++ );
}
/*--------------------------------------------------------------------
main
--------------------------------------------------------------------*/
void main( void )
{
unsigned char c;
init_sio( S9600 );
type("Тест драйвера SIO для стенда SDK-1.1\r\n");
type("Нажимайте кноки для тестирования... \r\n");
while( 1 )
251
{
if( rsiostat() )
{
c = rsio();
switch( c )
{
case '1': type("\r\ntest 1\r\n"); break;
case '2': type("\r\ntest 2\r\n"); break;
case '3': type("\r\ntest 3\r\n"); break;
default: wsio( c );
break;
}
}
}
}
При
организации асинхронного обмена по прерыванию при приеме байта с
линии происходит прерывание и передача управления соответствующей
программе-обработчику, который читает принятый байт из порта данных
контроллера UART и, к примеру, помещает его в специальный буфер-очередь
принятых байт, доступный прерванной программе (см. раздел А.2.4). По
завершении процедуры обработки прерывания управление передается в
прерванную программу, которая при желании (в любом удобном месте
алгоритма) может забрать принятый байт. С другой стороны, при завершении
отправки контроллером очередного байта также происходит прерывание,
сигнализирующее о том, что байт послан и в буфер UART можно поместить
новые данные. Обработчик прерывания, при наличии данных в исходящей
очереди, записывает очередной байт в порт данных контроллера и запускает
посылку. Основная же программа может, не заботясь о готовности или
неготовности контроллера принять очередной байт, может спокойно помещать
данные в исходящий буфер, а всю работу с устройством выполнит обработчик
прерываний, когда оно (устройство) будет готово.
Достарыңызбен бөлісу: