[an error occurred while processing this directive]
Не так страшен черт, как его Малюта
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено GM 02 ноября 2004 г. 13:57
В ответ на: spra958b отправлено Посмотри 02 ноября 2004 г. 11:18

Можно сделать проще и качественнее. Написать свои собственные программы для работы с модулями EV, SCI и ADC, и оформить их как подпрограммы, вызываемые из Си. Очень удобно, т.е. можно писать основную программу как на Си, так и на Ассемблере и всегда можно "довернуть" свои подпрограммы под текущие нужды.

Описание модулей можно посмотреть в spru051a (SCI), spru060b (ADC) и spru065b (EV).

Чтобы не быть слишком голословным, привожу как один из вариантов подпрограмму приема последовательных данных по протоколу RS232C.
Первое слово в буфере пользователя rxBuffer указывает требуемое число принимаемых байт. Буфер - словный, но используются только младшие байты. Так было сделано для простоты и компромисса. Функция всегда возвращает число байт, остающихся на данный момент в аппаратном буфере. Когда в аппаратном буфере фифо достаточно байт для приема, то функция размещает принятые байты в буфере пользователя.

; (C) Copyright 2004 by Makeev & daughters
;
; File: RXSCIA.ASM
; Title: Routine For Receiving Serial Data
; Version: 1.2
; Last updated: 27.07.04
; Author: Makeev I.A.
; Target: TMS320F2810 (CLKIN=20MHz)
;
; Support E-mail: makeev@podolsk.ru
;
; DESCRIPTION
; This routine is intended to receive up to 16 bytes via SCI-A module
; To call from C-program: int rxSCIA(unsigned int rxBuffer)

.include f2810.inc
.sect ".text"
.global _rxSCIA

_rxSCIA: movz dp,#0x1C1 ;SCI-A page
mov al,@SCIARXST ;
tbit @al,#7 ;
sbf rxfun1,ntc ;
lsl al,#8 ;
mov ah,@SCIFFRXA ;
lsr ah,#8 ;
or al,@ah ;
tclr @SCIACTL1,#5 ;0-->SW RESET
tset @SCIACTL1,#5 ;1-->SW RESET
tclr @SCIFFRXA,#13 ;rx fifo reset
tclr @SCIFFRXA,#13 ;re-enable rx fifo
lretr
rxfun1: and al,@SCIFFRXA,#0x1F00 ;received
lsr al,#8 ;enough
cmp al,*xar4 ;bytes?
sb rxfun3,lt ;no
movz ar0,*xar4++
dec @ar0 ;byteNumber-1
rxfun2: mov ah,@SCIARXBUF ;copy
mov *xar4++,ah ;rx buffer
banz rxfun2,ar0-- ;all bytes?
rxfun3: lretr
.end

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru