Використання модуля UART для зв’язку з комп'ютером.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Електронні обчислювальні машини

Інформація про роботу

Рік:
2004
Тип роботи:
Лабораторна робота
Предмет:
Основи програмування та алгоритмічні мови
Група:
СКС-5

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Лабораторна робота №2 „Використання модуля UART для зв’язку з комп'ютером” Виконав студент групи СКС-5 . Львів-2004 Мета роботи Ознайомитись з модулем UART. Теоретичні відомості. Особливості і Короткий Огляд • Асинхронний одержувач і відправник • Формат даних сумісний з послідовним форматом даних RS-232. • Норма передачі до 6 Mbits/second • Пакет даних складається з старту, перевірки парності, і бітів зупинки • Масковане переривання при отриманні регістр переповнений і/або буфер передачі порожній • Парність, вихід за межі, і виявлення помилки в пакетах. • Функції передачі і прийому на високому рівні. Модуль UART - це 8-розрядний універсальний асинхронний приймач передавач який підтримує дуплексний режим сумісний з RS-232, і послідовну передачу даних по двох і більше лініях.Підтримується програмоване тактування і масковані переривання.Функції API дозволяють ініціалізувати, конфігурувати і працювати з модулем UART. Додатковий високорівневий API підтримує роботу з рядками  Функціональний Опис Модуль UART включає послідовні приймач і передавач.В PSoC UART розділений на два блоки, які реалізують TX і RX, в Редакторі Пристрою PSoC. Блок TX PSoC забезпечує функціональність передавача і блок RX PSoC забезпечує функціональність приймача.RX і TX діять незалежно. Кожний має свій власний регістр статусу, контроль, програмоване переривання, в/в, буферний регістр, і регістр зсуву. Вони розділяють сигнал дозволу, тактування, і формат даних. Установка біту дозволу в регістрах контролю RX і TX включає UART. Дозвіл і блокування виконується, використовуючи функції API. Сигнал тактування в модулі UART є спільним для RX і TX. Частота тактування Має бути у вісім разів більша частоти передачі розряду даних.Частота конфігурується використовуючи Редактора Пристрою Конструктора PSoC. Дані отримані і передані є потік бітів який складається з стартового біта, вісім розрядів даних, контроль парності, і бітів зупинки.. Як RX так і TX є набором до тієї ж конфігурації паритету. Текст програми. include "m8c.inc" include "memory.inc" include "UART_2.inc" export UART_2_SetTxIntMode export _UART_2_SetTxIntMode export UART_2_EnableInt export _UART_2_EnableInt export UART_2_DisableInt export _UART_2_DisableInt export UART_2_Start export _UART_2_Start export UART_2_Stop export _UART_2_Stop export UART_2_SendData export _UART_2_SendData export UART_2_bReadTxStatus export _UART_2_bReadTxStatus export UART_2_bReadRxData export _UART_2_bReadRxData export UART_2_bReadRxStatus export _UART_2_bReadRxStatus export UART_2_IntCntl export _UART_2_IntCntl export UART_2_TxIntMode export _UART_2_TxIntMode export UART_2_PutSHexByte export _UART_2_PutSHexByte export UART_2_PutSHexInt export _UART_2_PutSHexInt export UART_2_CPutString export _UART_2_CPutString export UART_2_PutString export _UART_2_PutString export UART_2_PutChar export _UART_2_PutChar export UART_2_Write export _UART_2_Write export UART_2_CWrite export _UART_2_CWrite export UART_2_cGetChar export _UART_2_cGetChar export UART_2_cReadChar export _UART_2_cReadChar export UART_2_iReadChar export _UART_2_iReadChar export UART_2_PutCRLF export _UART_2_PutCRLF IF (UART_2_RXBUF_ENABLE) export UART_2_CmdReset export _UART_2_CmdReset export UART_2_bCmdCheck export _UART_2_bCmdCheck export UART_2_bCmdLength export _UART_2_bCmdLength export UART_2_bErrCheck export _UART_2_bErrCheck export UART_2_szGetParam export _UART_2_szGetParam export UART_2_szGetRestOfParams export _UART_2_szGetRestOfParams ENDIF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; WARNING WARNING WARNING ; The following exports are for backwards compatibility only and should ; not be used for new designs. They may be eliminated in a future release. ; Their status is "NO FURTHER MAINTENANCE". ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; export bUART_2_ReadTxStatus export _bUART_2_ReadTxStatus export bUART_2_ReadRxData export _bUART_2_ReadRxData export bUART_2_ReadRxStatus export _bUART_2_ReadRxStatus ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; END WARNING ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;----------------------------------------------- ; Variable Allocation ;----------------------------------------------- IF (UART_2_RXBUF_ENABLE) area UART_2_RAM (RAM, REL, CON) ptrParam: BLK 1 ENDIF area text (ROM,REL) ;----------------------------------------------- ; EQUATES ;----------------------------------------------- bfCONTROL_REG_START_BIT: equ 1 ; Control register start bit bfFUNCTION_REG_TX_INT_MODE_BIT: equ 0x10 ; the TX Int Mode bit area UserModules (ROM, REL, CON) ; UART_2_EnableInt: _UART_2_EnableInt: RAM_PROLOGUE RAM_USE_CLASS_1 M8C_EnableIntMask UART_2_TX_INT_REG, UART_2_TX_INT_MASK M8C_EnableIntMask UART_2_RX_INT_REG, UART_2_RX_INT_MASK RAM_EPILOGUE RAM_USE_CLASS_1 ret .ENDSECTION include "UART_2.inc" include "memory.inc" include "m8c.inc" ;----------------------------------------------- ; Global Symbols ;----------------------------------------------- export _UART_2_TX_ISR export _UART_2_RX_ISR IF (UART_2_RXBUF_ENABLE) export UART_2_aRxBuffer export _UART_2_aRxBuffer export UART_2_bRxCnt export _UART_2_bRxCnt export UART_2_fStatus export _UART_2_fStatus ENDIF ;----------------------------------------------- ; Variable Allocation ;----------------------------------------------- AREA InterruptRAM (RAM, REL, CON) IF (UART_2_RXBUF_ENABLE) UART_2_fStatus: _UART_2_fStatus: BLK 1 UART_2_bRxCnt: _UART_2_bRxCnt: BLK 1 AREA UART_2_RAM (RAM, REL, CON) UART_2_aRxBuffer: _UART_2_aRxBuffer: BLK UART_2_RX_BUFFER_SIZE ENDIF AREA InterruptRAM (RAM, REL, CON) ;@PSoC_UserCode_INIT@ (Do not change this line.) ;--------------------------------------------------- ; Insert your custom declarations below this banner ;--------------------------------------------------- ;------------------------ ; Includes ;------------------------ ;------------------------ ; Constant Definitions ;------------------------ ;------------------------ ; Variable Allocation ;------------------------ ;--------------------------------------------------- ; Insert your custom declarations above this banner ;--------------------------------------------------- ;@PSoC_UserCode_END@ (Do not change this line.) AREA UserModules (ROM, REL, CON) ;----------------------------------------------------------------------------- ; FUNCTION NAME: _UART_2_TX_ISR ; ; DESCRIPTION: ; UART TX interrupt handler for instance UART_2. ; ; This is a place holder function. If the user requires use of an interrupt ; handler for this function, then place code where specified. ;----------------------------------------------------------------------------- _UART_2_TX_ISR: ;@PSoC_UserCode_BODY_1@ (Do not change this line.) ;--------------------------------------------------- ; Insert your custom code below this banner ;--------------------------------------------------- ; NOTE: interrupt service routines must preserve ; the values of the A and X CPU registers. ;--------------------------------------------------- ; Insert your custom code above this banner ;--------------------------------------------------- ;@PSoC_UserCode_END@ (Do not change this line.) reti ;----------------------------------------------------------------------------- ; FUNCTION NAME: _UART_2_RX_ISR ; ; DESCRIPTION: ; UART RX interrupt handler for instance UART_2. ; This ISR handles the background processing of received characters if ; the buffer is enabled. ; ; ; The following assumes that the RX buffer feature has been enabled. ; ; SIDE EFFECTS: ; There are 3 posible errors that may occur with the serial port. ; 1) Parity Error ; 2) Framing Error ; 3) OverRun Error ; ; This user module check for parity and framing error. If either of these ; two errors are detected, the data is read and ignored. When an overRun ; error occurs, the last byte was lost, but the current byte is valid. For ; this reason this error is ignored at this time. Code could be added to ; this ISR to set a flag if an error condition occurs. ; ; THEORY of OPERATION: ; When using the RX buffer feature, the ISR collects received characters ; in a buffer until the user defined command terminator is detected. After ; the command terminator is detected, the command bit is set and all other ; characters will be ignored until the command bit is reset. Up to ; buffer_size - 1 characters will be collected waiting for a command ; terminator. After that, the characters will be discarded, although ; a command determinator will still cause the command bit to be set. ; ;----------------------------------------------------------------------------- _UART_2_RX_ISR: ;@PSoC_UserCode_BODY_2@ (Do not change this line.) ;--------------------------------------------------- ; Insert your custom code below this banner ;--------------------------------------------------- ; NOTE: interrupt service routines must preserve ; the values of the A and X CPU registers. ;--------------------------------------------------- ; Insert your custom code above this banner ;--------------------------------------------------- ;@PSoC_UserCode_END@ (Do not change this line.) IF (UART_2_RXBUF_ENABLE) push A push X IF SYSTEM_LARGE_MEMORY_MODEL REG_PRESERVE IDX_PP ENDIF mov X,[UART_2_bRxCnt] ; Load X with byte counter mov A,REG[UART_2_RX_CONTROL_REG] ; Read the control register push A ; Store copy for later test ; IF real RX interrupt and A,UART_2_RX_REG_FULL ; Did really really get an IRQ jnz .UARTRX_ReadRx ; Data ready, go get it pop A ; Restore stack jmp .RESTORE_IDX_PP .UARTRX_ReadRx: pop A ; Restore status flags ; IF there is no error, get data ; Check for parity or framing error and A,UART_2_RX_ERROR jz .UARTRX_NO_ERROR ; If there is not an Error go read data or [UART_2_fStatus],A ; Set error flags (parity,framing,overrun) bits mov A,REG[UART_2_RX_BUFFER_REG ] ; Read the data buffer to clear it. and A,UART_2_RX_FRAMING_ERROR ; Check for framing error special case jz .RESTORE_IDX_PP ; Not framing error, all done ; Disable and re-enable RX to reset after ; framing error. and REG[UART_2_RX_CONTROL_REG], ~UART_2_RX_ENABLE ; Disable RX or REG[UART_2_RX_CONTROL_REG], UART_2_RX_ENABLE ; Enable RX jmp .RESTORE_IDX_PP ; Done with framing error, leave. .UARTRX_NO_ERROR: mov A,REG[UART_2_RX_BUFFER_REG ] ; Read the data buffer ; IF buffer not full tst [UART_2_fStatus],UART_2_RX_BUF_CMDTERM ; Check for buffer full jnz .RESTORE_IDX_PP ; All done cmp A,UART_2_CMD_TERM ; Check for End of command jnz .UARTRX_CHK_CTLCHAR or [UART_2_fStatus],UART_2_RX_BUF_CMDTERM ; Set command ready bit RAM_SETPAGE_IDX >UART_2_aRxBuffer RAM_CHANGE_PAGE_MODE FLAG_PGMODE_10b mov [X + UART_2_aRxBuffer],00h ; Zero out last data RAM_CHANGE_PAGE_MODE FLAG_PGMODE_00b jmp .RESTORE_IDX_PP .UARTRX_CHK_CTLCHAR: ; Ignore charaters below this value ; If ignore char is set to 0x00, do not ; ignore any characters. IF(UART_2_RX_IGNORE_BELOW) cmp A,UART_2_RX_IGNORE_BELOW jc .RESTORE_IDX_PP ENDIF .UARTRX_CHK_OVFL: ; Check for MAX String here RAM_SETPAGE_IDX >UART_2_aRxBuffer ; using idexed address mode cmp [UART_2_bRxCnt],(UART_2_RX_BUFFER_SIZE - 1) jc .UARTRX_ISR_GETDATA RAM_CHANGE_PAGE_MODE FLAG_PGMODE_10b mov [X + UART_2_aRxBuffer],00h ; Zero out last data in the buffer RAM_CHANGE_PAGE_MODE FLAG_PGMODE_00b or [UART_2_fStatus],UART_2_RX_BUF_OVERRUN ; Set error flags (parity,framing,overrun) bits jmp .RESTORE_IDX_PP .UARTRX_ISR_GETDATA: ; IF input data == "CR", then end of command ; X is already loaded with pointer RAM_CHANGE_PAGE_MODE FLAG_PGMODE_10b mov [X+UART_2_aRxBuffer],A ; store data in array RAM_CHANGE_PAGE_MODE FLAG_PGMODE_00b inc X ; Inc the pointer mov [UART_2_bRxCnt],X ; Restore the pointer ; ENDIF max string size .RESTORE_IDX_PP: IF SYSTEM_LARGE_MEMORY_MODEL REG_RESTORE IDX_PP ENDIF .END_UARTRX_ISR: pop X pop A ENDIF UART_2_RX_ISR_END: reti Висновок Під час лабораторної роботи я дрслідив роботу модуля UART
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!