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

 
 
> Минимальный код для работы с портом AT91SAM7
Vinterman
сообщение Nov 6 2008, 09:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 3-03-08
Из: г.Томск
Пользователь №: 35 572



Всем доброго времени суток! Возникла необходимость перейти с AVR на ARM-ы. Вот тут сразу незадачка вышла. Прочитал, пересмотрел, перелопатил достаточно большое количество примеров программ, литературы (Бедного редькина и Англ даташит). Купил отладочную платку, SAM7-P64, Wiggler программаторик. "Стянул" IAR с интернета, "вылечил" его и приступил к работе. Для начала решил определиться, какой же минимум подключаемых файлов необходим, ибо все примеры пестрят ТАКИМ их количеством, что порой черт ногу сломит.
Вроде подразобрался, написал первую прогу и тут же сел в лужу wacko.gif

Как и водится, решил "поиграть" ножками для начала. Но перед тем как "зашивать", как водится запустил прогу в эмуляторе.
Эмулятор работает, прога на первый взгляд выполняется. НО!!!! В регистре PMC_SCSR после сброса (Выполнение программы только начинается) ВСЕ НУЛИ!! Когда флаг PCK (состояние тактирования процессора) должен быть установлен! И многие остальные регистры, так же не выходят на свое первоначальное состояние.
После выполнения записи в регистр PIO_SODR, как я полагаю, должны установиться соответствующие биты и в регистре PIO_ODSR. (а в PIO_SODR сброситься в окне эмулятора ????) Этого не происходит!!! Что за ерунда? Что я не правильно делаю? То же самое происходит и с остальными регистрами. Скажем при установки PIO_OER, не меняется PIO_OSR.... Программировать контроллер не программировал. Думал может надо разрешить тактирование PIO и процессора, дописал соответствующие команды, нифига. Пробовал записывать регистры состояния в отдельный регистр (считывал), думал может тут баг, ведь вроде они для чтения, но умом то понимал, что блин эмулятор должен показывать, как и ожидалось, ничего не произошло smile.gif считались НУЛИ smile.gif

Вот пример программы: (прошу не критиковать код ибо все получилось в результате безрезультатных попыток на скорую руку запустить эмулятор из имеющихся под рукой программ)

// *******************************************************
// Header Files
// *******************************************************
#include "AT91SAM7S256.h"

unsigned int a;

int main (void) {

while (1)
{

volatile AT91PS_PIO pPIO = AT91C_BASE_PIOA; // pointer to PIO data structure
volatile AT91PS_PMC pPMC = AT91C_BASE_PMC;

pPMC->PMC_PCER = 1 << AT91C_ID_PIOA;
pPMC->PMC_SCER = 1 << 0;

pPIO->PIO_PER = 4; // PIO Enable Register - allow PIO to control pins
pPIO->PIO_OER = 0xFFFF; // PIO Output Enable Register
pPIO->PIO_SODR = 12; // PIO Set Output Data Register
pPIO->PIO_CODR = 4;

a = pPIO->PIO_ODSR;
// a = pPIO->PIO_CODR;

}




}






Прошу помощи!!!!! HELP!!!
Чего не хватает, где упущение, если можно , то образец минимального набора прикрипляемых файлов и кода программы хотелось бы посмотреть для управления ножками контроллера

Сообщение отредактировал Vinterman - Nov 6 2008, 09:07
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Vinterman
сообщение Nov 19 2008, 03:57
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 3-03-08
Из: г.Томск
Пользователь №: 35 572



Вроде разобрался с кодом на асме. Компилит сам код без ошибок вышеописанных, но блин, выдаются следующие ошибки:
Прикрепленное изображение

даже когда код на асме урезаю до

PROGRAM ?RESET
RSEG INTRAMSTART_REMAP
RSEG INTRAMEND_REMAP

RSEG ICODE:CODE:ROOT(2)
CODE32 ; Always ARM mode after reset

reset
org 0x18
ldr pc,[pc,#-0xF20];

org 0x1c
ldr pc,[pc,#-0xF20];


ENDMOD

END

усе равно ошибка эта вылазит. Как только асмовский файл убиваю, так все тип топ и нормально дебугерется. sad.gif
help.gif



и еще, что означают вот эти строки ?

//* open FIQ interrupt
AT91F_PIO_CfgPeriph(AT91D_BASE_PIO_SW,AT91B_SW1,0);
AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_FIQ, FIQ_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE, FIQ_init_handler);
AT91F_AIC_EnableIt (pAic, AT91C_ID_FIQ);

Скачал примеры от атмела. плин, черт ногу сломит. Компилю их же пример, ошибка:
Fatal Error[e72]: Segment INTRAMEND_REMAP must be defined in a segment definition option (-Z, -b or -P)
что это, и где ее исправлять ?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 19 2008, 09:02
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Vinterman @ Nov 19 2008, 05:57) *
Вроде разобрался с кодом на асме. Компилит сам код без ошибок вышеописанных, но блин, выдаются следующие ошибки:
А что вас заставило вставлять в проект именно этот файл, именно с таким названием модуля и описывать в нем вектор ресета, который и так есть в библиотеке? Ведь именно на это и ругается линкер, но вы почему-то это предупреждение игнорируете. Для вашей одной единственной команды надо было создать файл с именем вроде irq_handler.s79 и таким содержимым:
Код
    COMMON INTVEC:CODE:ROOT
    CODE32; Always ARM mode after reset
    org 0x1c
    ldr pc,[pc,#-0xF20];
    END


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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