реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> AT91sam7S128 UART для Keil, Как реализовать прерывание для UART в Keil.
aaarrr
сообщение Apr 22 2011, 11:19
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Cezar @ Apr 22 2011, 15:14) *
Может я не прав но что бы программно симитировать что поступили данные делаюю следующее

Данное действие смысла не имеет. RHR - это read-only регистр.
Go to the top of the page
 
+Quote Post
Cezar
сообщение Apr 22 2011, 11:26
Сообщение #17





Группа: Новичок
Сообщений: 9
Регистрация: 12-05-08
Из: Феодосия
Пользователь №: 37 452



Цитата(aaarrr @ Apr 22 2011, 14:19) *
Данное действие смысла не имеет. RHR - это read-only регистр.

sm.gif точно протупил. А какой тогда для этого регистр использовать?
Или программно симитировать это не возможно?

Сообщение отредактировал Cezar - Apr 22 2011, 11:29
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 22 2011, 11:47
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Cezar @ Apr 22 2011, 15:26) *
Или программно симитировать это не возможно?

Возможно, если установить прерывание в режиме edge sensetive. Тогда достаточно будет установить соответствующий битик в AIC_ISCR.

Для нормальной работы не рекомендую - как показывает опыт, огромное количество людей получают проблемы по собственной невнимательности, да и разумных причин использовать его нет.
Go to the top of the page
 
+Quote Post
Cezar
сообщение Apr 24 2011, 18:45
Сообщение #19





Группа: Новичок
Сообщений: 9
Регистрация: 12-05-08
Из: Феодосия
Пользователь №: 37 452



Теперь у меня по срабатыванию прерывания программа улетает в неизвестные адреса

Код
0x00000018  00000000  ANDEQ     R0,R0,R0


Вообще в пример есть обработка прерывания от кнопки и там по-мимо стандартного стартап добалет файл
irq.s с таким кодом.

Код
;/*****************************************************************************/
;/* IRQ0.S: IRQ 0 Nested Interrupt                                            */
;/*****************************************************************************/
;/* This file is part of the uVision/ARM development tools.                   */
;/* Copyright (c) 2005-2006 Keil Software. All rights reserved.               */
;/* This software may only be used under the terms of a valid, current,       */
;/* end user licence from KEIL for a compatible version of KEIL software      */
;/* development tools. Nothing else gives you the right to use this software. */
;/*****************************************************************************/

                AREA    IRQ0, CODE, READONLY
                ARM

                PRESERVE8
                ALIGN
                IMPORT  irq0_nint
                EXPORT  irq0_int
irq0_int        FUNCTION

                SUB     LR, LR, #4        ; Update Link Register
                STMFD   SP!, {R0-R12, LR}    ; Save Workspace & LR to Stack
                MRS     R0, SPSR             ; Copy SPSR to R0
                STMFD   SP!, {R0, R1}        ; Save SPSR to Stack (8-byte)
                MSR     CPSR_c, #0x1F        ; Enable IRQ (Sys Mode)
                STMFD   SP!, {R0, LR}        ; Save LR_sys to Stack (8-byte)
                LDR     R0, =irq0_nint    ; Get IRQ Function Address
                MOV     LR, PC            ; Return Address
                BX      R0                ; Call IRQ Function
                LDMFD   SP!, {R0, LR}        ; Restore LR_sys
                MSR     CPSR_c, #0x92        ; Disable IRQ (IRQ Mode)
                LDMFD   SP!, {R0, R1}        ; Restore SPSR to R0
                MSR     SPSR_cxsf, R0        ; Copy R0 to SPSR
                LDMFD   SP!, {R0-R12, PC}^; Return to program

                ENDFUNC

                END


не стоит ли и мне что-то в этом роде под уарт написать и если да то что.

Сообщение отредактировал Cezar - Apr 24 2011, 18:49
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 25 2011, 08:45
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Cezar @ Apr 24 2011, 22:45) *
Теперь у меня по срабатыванию прерывания программа улетает в неизвестные адреса

Код
0x00000018  00000000  ANDEQ     R0,R0,R0

Вообще-то это адрес вектора прерывания. Подозреваю, что где-то в вашей программе сделан ремап, поэтому там пусто.

Цитата(Cezar @ Apr 24 2011, 22:45) *
не стоит ли и мне что-то в этом роде под уарт написать и если да то что.

Это обертка для обеспечения вложенных прерываний. Думаю, сейчас вам она ни к чему.
Go to the top of the page
 
+Quote Post
Cezar
сообщение Apr 25 2011, 10:41
Сообщение #21





Группа: Новичок
Сообщений: 9
Регистрация: 12-05-08
Из: Феодосия
Пользователь №: 37 452



Цитата(aaarrr @ Apr 25 2011, 11:45) *
Вообще-то это адрес вектора прерывания. Подозреваю, что где-то в вашей программе сделан ремап, поэтому там пусто.


a14.gif Ураааа нашел. Во всем было виновата вот эта строчка

Код
AT91C_BASE_MC->MC_RCR = AT91C_MC_RCB; // Remap the internal SRAM at 0x0


Сообщение отредактировал Cezar - Apr 25 2011, 10:41
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01338 секунд с 7
ELECTRONIX ©2004-2016