alexan300
Oct 25 2009, 19:44
Господа помогите!!
Отладочную плату подключаю через юсб. Использую IAR. Как прошить контролер?
Код
#include "сдесь библиотека"
short unsigned int i;
void main (void)
{
DDRA = 255;-ошибка сдесь
PORTA = 0; и сдесь
while(1)
{
if (PORTA == 255)
PORTA = 0;
else
PORTA++;
for (i=0; i<10000; i++)
{
}
}
}
на этапе конпиляции возникают ошибки.
и как мне откомпелированную программу отправить на контролер через юсб?
aaarrr
Oct 25 2009, 19:52
Цитата(alexan300 @ Oct 25 2009, 22:44)

на этапе конпиляции возникают ошибки.
DDRA = 255;-ошибка сдесь
PORTA = 0; и сдесь
Ну, попробуйте найти регистры с такими именами в "библиотеке".
Еще раз: это не AVR!Цитата(alexan300 @ Oct 25 2009, 22:44)

и как мне откомпелированную программу отправить на контролер через юсб?
При помощи
SAM-BA.
alexan300
Oct 25 2009, 20:21
ЭЭЭх знать бы еще где эти библиотеки наити и как их читать(
Даташит в принципе есть укороченый на англиском, но где там порты где адреса где стеки и тд я не знаю.
понял что не авр)
самбу скачал, что то она просит селект зе конекшен..что туда написать7?? самба в 2.9
aaarrr
Oct 25 2009, 20:26
Цитата(alexan300 @ Oct 25 2009, 23:21)

Даташит в принципе есть укороченый на англиском...
На этой странице качаете:
ARM7TDMI Technical Reference Manual (284 pages, updated 04/01)
AT91SAM7S Series Preliminary (757 pages, revision I, updated 12/08)
Без изучения этих документов браться за программирование - пустая трата времени.
alexan300
Oct 25 2009, 20:40
Хех) форум называется помошь начинающему..
а там в пдфе помоему конструкция атомного реактора да еще и на англиском)
а на русском Вам ничего не попадалось?
sergeeff
Oct 25 2009, 20:55
Вы для любопытства зайдите на сайт www.atmel.com. Не поверите, но там есть подробные примеры по всем выпускаемым контроллерам и, самое интересное, описание, как пользоваться этой самой Samba.
Посмотрите, как организованы эти примеры. На дурочку, что-то там понаписать в main() - это не прокатит.
aaarrr
Oct 25 2009, 21:19
Цитата(alexan300 @ Oct 25 2009, 23:40)

Хех) форум называется помошь начинающему..
Ну, если не терпится помигать светодиодом, возьмите Keil MDK - там есть проекты типа "Blinky" под все поддерживаемые платформы.
Цитата(alexan300 @ Oct 25 2009, 23:40)

а там в пдфе помоему конструкция атомного реактора да еще и на англиском)
а на русском Вам ничего не попадалось?
На русском можно что-то посмотреть
здесь. Но от чтения родной документации все равно никуда не деться.
alexan300
Oct 25 2009, 21:22
Sam ba запустил ,плату инициализировал ,она у меня как оборудованеи в виндах появилась.
уже прогресс..)
как прошить МК вроде понял..
а вот про примеры на атмеловском сайте можно поточнее, где они? плохо я в англиском то..
sergeeff
Oct 25 2009, 22:50
Да, голубчик, так вы далеко не уедете. В порядке взаимопомощи (первый и последний раз) держите
http://atmel.com/dyn/products/tools_card.asp?tool_id=4343.
alexan300
Oct 26 2009, 19:48
Большое спасибо! но нехочу показаться наглым)). но там один асемблер...а где же СИ???
sergeeff
Oct 26 2009, 23:55
Что-то вы путаете, там как раз один С.
alexan300
Oct 28 2009, 21:16
Господа, прошу вас обьяснить начинающему на пальцах (но без них). как пользоваться как зашить програму в МК ?
имею IAR 5.4
SAM Ba v2.9
USB шнурок
и плату с установленым МК AT91SAM7S256.
хотелось бы для начала элементарое моргание светодиодом ,только лишь что бы понять алгоритм деиствии при создании проекта, компиляции и прошивки. и последующего запуска исполняемого фаила на МК.
В IAR мне удалось создать откомпелированый bin фаил, так же его увидел SAM BA. но вот контролеру все это не понравилось. и на этапе прошивки все виснит. Я нашел примеры настроек для IAR но для более старои версии, может кто подскажет какие настроики нужно указать для вышеназванои версии.
Прошу вас не отсылаите меня к даташитам...и к примерам на англииском.
Keil MDK что это за зверь??
aaarrr
Oct 28 2009, 21:28
Цитата(alexan300 @ Oct 29 2009, 00:16)

Прошу вас не отсылаите меня к даташитам...и к примерам на англииском.
На русском даташит изучили?
Цитата(alexan300 @ Oct 29 2009, 00:16)

Keil MDK что это за зверь??
Среда разработки.
alexan300
Oct 28 2009, 21:38
Цитата(aaarrr @ Oct 29 2009, 00:28)

На русском даташит изучили?
Среда разработки.
меня больше интересует имено алгоритм компиляции и прошивки..как то есть ли необходимость замкнуть жампер на плате резет.что нужно выставить в яре..как выставить выходы на выход и как отправить туда 1 или 0.,я где то уже откопал.
какое собщение должно появится в самбе в случае удачи.?
aaarrr
Oct 28 2009, 21:57
Цитата(alexan300 @ Oct 29 2009, 00:38)

какое собщение должно появится в самбе в случае удачи.?
Никакого, насколько я помню. Т.е. удача = отсутствие сообщений об ошибках.
alexan300
Oct 29 2009, 19:40
Ну так как знатоки МК..подскажите начинающему как пользоваться вышеназванными штуками?
Программа в IAR ошибок не показала, SAMBA тоже смолчал...но при попытки сохранить фаил на мк вся система виснет..((
alexan300
Oct 29 2009, 20:47
УРА увожаемые! нашел!
вот ссылка на книгу Редькина!!
может кому тоже пригодится..то что искал весь алгоритм записан!! (бесплатно)
http://obuk.ru/programming/29678-3216-bitn...llery-arm7.html
aaarrr
Oct 29 2009, 21:14
Ну, теперь точно не пропадете, хе-хе.
alexan300
Oct 29 2009, 21:45
а один фиг..виснит при попытке прочесть записанный фаил (
aaarrr
Oct 29 2009, 21:51
Вы лучше напишите по пунктам, что делаете, и где виснет, а то понять что-либо трудно.
sergeeff
Oct 29 2009, 22:26
Не, уважаемый aаarrr.
Товарищ пока даже не понимает, как вкл/выкл светодиоду сделать. Как же он тогда сможет понять (а тем паче запрограммировать и отладить), где и что у него виснет?
И, думаю, что startup-файл для него пока вещь из области непознанного со всеми вытекающими последствиями.
alexan300
Oct 30 2009, 14:37
Код
#include "ioat91sam7s256.h"
AT91S_PIO * pPIO = AT91C_BASE_PIOA;
#define OUT_MASK (1UL<<29)
unsigned long tt = 0;
int main(void){
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA);
pPIO->PIO_PER = OUT_MASK;
pPIO->PIO_OER = OUT_MASK;
pPIO->PIO_SODR = OUT_MASK;
pPIO->PIO_CODR = (1UL<<29);
for(;;){
if(tt < 10000000){tt++;}else {tt=0;}
if(tt >5000000){pPIO->PIO_SODR = (1<<29);} else{pPIO->PIO_CODR = (1<<29);}
}
return 0;
}//end main
помогите разобраться... приложил скрин экрана.
http://fotki.yandex.ru/users/alexan300/view/133829?page=0если этих фоток мало то могу еще сделать только скажите какие?
aaarrr
Oct 30 2009, 15:57
Нет, так не пойдет. Словами напишите, что не получается.
sergeeff
Oct 30 2009, 23:12
Скорее всего светодиодик зажигается у вас, когда на на выходе PA29 = "0".
Тогда пишем:
Код
#include "ioat91sam7s256.h"
#define OUT_MASK (1UL<<29)
unsigned long tt = 0;
int main(void)
{
AT91S_PIO * pPIO = AT91C_BASE_PIOA;
pPIO->PIO_PER = OUT_MASK;
pPIO->PIO_OER = OUT_MASK;
pPIO->PIO_CODR = OUT_MASK;
while(1);
}
Компилируем, запускаем. Если светодиод горит - программа нормально стартанула и отработала, если нет - до main() дело не дошло. Тогда переносим эти 5 строк из main в startup файл, куда-нибудь, хоть бы даже в самое начало. Повторяем - смотрим. Если не горит, вы:
1. Вообще не туда пишите программу.
2. Не обеспечиваете запуск программы.
Так постепенно можно понять, что работает, что нет. Когда все заработает в main - можно написать что-нибудь более существенное.
Успехов
alexan300
Oct 30 2009, 23:52
Делаю я так.
в IAR выставляю расшерение выходного фаила bin.
затем после компиляции запускаю симуляцию, все ок. все зелененькое.
в самбе выбираю bin фаил , затем send, все по вышеназваннои книге.
вроде все прошивает, но МК как выдает на все ноги 1, горит светодиод который я переодически подключаю к земле и разным выходам. если же я в самбе пытаюсь прочесть записанное то самба виснит и вылетает...предлагает отправить отчет о ошибке.
сеичас попробую внести изменения, как предложил sergeeff.
спасибо за помощь.
aaarrr
Oct 31 2009, 00:01
Цитата(alexan300 @ Oct 31 2009, 02:52)

вроде все прошивает, но МК как выдает на все ноги 1, горит светодиод который я переодически подключаю к земле и разным выходам.
Загрузчик стирается? Самба после этого не подключается до следующего восстановления через TST?
Цитата(alexan300 @ Oct 31 2009, 02:52)

если же я в самбе пытаюсь прочесть записанное то самба виснит и вылетает...предлагает отправить отчет о ошибке.
Прочесть или сравнить? А так - да, софт весьма кривой.
alexan300
Oct 31 2009, 00:07
да, после "прошивки" что бы плата определилась в виндах приходится замыкать резет и после этого подключать.после этого снова определяется системои.
нажимаю reseive file и вот..виснит(
а как мне проверить выпонение загруженного фаила? надоли замкнуть чтонить на платке или же напротив?
sergeeff
Oct 31 2009, 00:16
Любой приличный загрузчик должен позволить:
1. Загрузить программу в нужную память с нужного адреса.
2. Позволить убедится в том, что это правильно произошло (возможны варианты, каким образом).
3. Передать управление прикладной (загруженной) программе.
Вы можете твердо быть уверены, что этими тремя моментами в полной мере овладели? Похоже, что нет.
alexan300
Oct 31 2009, 00:21
ага! в reseive file надо создать фаил, а наполнится он с мк??
я правильно понял?
фаил создал, ничего не зависло, но он отличается от загруженого фаила в разы по размеру..
так и должно быть?
3. Передать управление прикладной (загруженной) программе.
вот этот пунктик не понял..проясните плз.
что нужно в самбе выставить7
aaarrr
Oct 31 2009, 00:50
Цитата(alexan300 @ Oct 31 2009, 03:07)

да, после "прошивки" что бы плата определилась в виндах приходится замыкать резет и после этого подключать.после этого снова определяется системои.
Reset или TST?
Цитата(alexan300 @ Oct 31 2009, 03:07)

нажимаю reseive file и вот..виснит(
А кнопочку "Compare sent file with memory" нажать что-то мешает?
И еще: таргет выбран правильно, или стоит NO_BOARD? В последнем случае самба будет только делать вид, что работает.
alexan300
Oct 31 2009, 01:07
в таргете выставлен деваис Atmel AT91SAM7S256
замыкаю джампер тест.
http://projects.org.ua/project/arm/AT91SAM...l#_Toc140292988вот по этои ссылке я вижу что светодиод подключается питание-вывод мк.
а я подключаю земля - вывод мк , может это влиять??
aaarrr
Oct 31 2009, 01:20
Цитата(alexan300 @ Oct 31 2009, 04:07)

а я подключаю земля - вывод мк , может это влиять??
Нет.
sergeeff
Oct 31 2009, 01:35
Чтобы не было у автора ветки недопонимания по моему адресу: я с SAMBA никогда не работал и ее конкретных нюансов не знаю. Но уверен, что она принципиально ничем не отличается от аналогичных BOOTLOADER'ов и встроенных мониторов. Т.е. как минимум должна обеспечивать реализацию тех самых 3 моментов, которые я отмечал. Да и вообще-то, у Atmel'a есть же внятное описание как с ней работать. Какого же лешего не прочитать?
alexan300
Oct 31 2009, 14:56
НУ ВСЕ..кажется я либо сжег мк..что маловероятно
скорее удалил загрузчик из памяти мк..
его теперь винды не видят, хоть пляши с бубном
самба не видет плату с мк.
как востановить закузчик господа??
стандартная операция не помогает (тест замкнуть, подключить питание, подождать, тест разомкнуть и включить питание)
караул!
sergeeff
Oct 31 2009, 16:58
SAMBA сидит в ROM памяти (однократно программируемой в процессе производства) и ее стереть невозможно. Так что, скорее всего, процессор капут, хотя это надо постараться.
aaarrr
Oct 31 2009, 16:58
На ERASE попробуйте кратковременно подать высокий уровень, а затем снова повторить операцию с TST.
alexan300
Oct 31 2009, 20:10
aaarrr !!!
спасибо большое помогло!
конечно подобраться к 55 ноге не просто было, она выход на колодку не имеет.
Код
#include "ioat91sam7s256.h"
#define OUT_MASK (1UL<<8)
unsigned long tt = 0;
int main(void)
{
AT91S_PIO * pPIO = AT91C_BASE_PIOA;
pPIO->PIO_PER = OUT_MASK;
pPIO->PIO_OER = OUT_MASK;
pPIO->PIO_CODR = OUT_MASK;
while(1);
}
господа!!
http://www.olimex.com/dev/pdf/sam7-p64.pdfответьте плз, я ж на РА8 1 подаю?
и как в самбе указать загружаться МК из флешь?
в примере я видел boot fron flash.
у меня почему то в самбе подругому как то это называется((
МК прошивается уже.. ,проверял так.. start adres 0x100000 refrech и появляется код полсе прошивки..
затем удаляю все содержимое флеш памяти, кнопкои erese all flash и с этого адреса считываются нули..(ну или что там )
затем опять прописываю во флеш бин фаил, стартую с адреса 100000 и вуаля!! в памяти МК опять что то есть!
фот только не понимаю какои мне скрипт надо выбрать, что бы при следующеи загрузке МК стартовал с адреса 10000 и выполнял мою программу???
хелп ми!!
aaarrr
Oct 31 2009, 21:28
Цитата(alexan300 @ Oct 31 2009, 23:10)

ответьте плз, я ж на РА8 1 подаю?
Нет, 0.
Цитата(alexan300 @ Oct 31 2009, 23:10)

и как в самбе указать загружаться МК из флешь?
Он и так всегда стартует из флеш.
alexan300
Oct 31 2009, 22:03
Цитата(aaarrr @ Nov 1 2009, 00:28)

Нет, 0.
Он и так всегда стартует из флеш.
стартует после закрытия самбы?
а без закрытия можно? а как?
после выкл и вкл питания на плате?
можно кнопкои резет воспользоваться для этого?
aaarrr
Oct 31 2009, 22:12
Цитата(alexan300 @ Nov 1 2009, 01:03)

стартует после закрытия самбы?
Стартует после сброса или выключения-включения питания.
alexan300
Nov 1 2009, 08:01
Цитата(aaarrr @ Nov 1 2009, 01:12)

Стартует после сброса или выключения-включения питания.
а бывает такое что программа записывается в память мк, но не стартует? на всех ногах PIO A , B 5 вольт.
sergeeff
Nov 1 2009, 11:52
По умолчанию все выводы портов работают как выходы и на них "1".
Цитата(sergeeff @ Nov 1 2009, 14:52)

По умолчанию все выводы портов работают как выходы и на них "1".
Как входы, а "1" на них может быть только за счет внутренних pull-up'ов (довольно мощных, надо заметить).
sergeeff
Nov 1 2009, 20:06
Цитата(aaarrr @ Nov 1 2009, 18:50)

Как входы, а "1" на них может быть только за счет внутренних pull-up'ов (довольно мощных, надо заметить).
Конечно как входы, это я по случаю week end'a попутал. Извиняюсь.
alexan300
Nov 2 2009, 17:03
CODE
#include <intrinsics.h>
#include "ioat91sam7s256.h"
#include "system.h"
#include "adc.h"
#define LONG 5000000
#define SHORT 1000000
//#define LONG 900000
//#define SHORT 100000
//MAIN POINTER
AT91PS_PIO m_pPio = AT91C_BASE_PIOA;
AT91PS_PMC m_pPMC = AT91C_BASE_PMC;
AT91PS_USART m_pUSART = AT91C_BASE_US0;
AT91PS_PDC m_pPDC = AT91C_BASE_PDC_US0;
AT91PS_MC m_pMC = AT91C_BASE_MC;
AT91PS_AIC m_pAic = AT91C_BASE_AIC;
AT91PS_SYS m_pSys = AT91C_BASE_SYS;
AT91PS_ADC m_pADC = AT91C_BASE_ADC;
AT91PS_RSTC m_pRSTC = AT91C_BASE_RSTC;
//it's a simple delay
void Delay (unsigned long a) { while (--a!=0); }
unsigned int i = 0;
int main()
{
__disable_interrupt();
// System init
//InitFrec();
// Init perifery
InitPeriphery();
//Enable RESET
m_pRSTC->RSTC_RCR = 0xA5000008;
m_pRSTC->RSTC_RMR = 0xA5000001;
//enable the clock of the PIO
m_pPMC->PMC_PCER = 1 << AT91C_ID_PIOA;
Delay(100000);
// Configure led
m_pPio->PIO_SODR = BIT8; // Set PA8 to HIGH -> led off
m_pPio->PIO_OER = BIT8; // Configure PA8 as output
while(1)
{
m_pPio->PIO_CODR = BIT8; // Set PA8 to LOW -> led on
Delay(80000);
m_pPio->PIO_SODR = BIT8; // Set PA8 to HIGH -> led off
Delay(80000);
}
}
люди гляньте плз!
может быть в коде логическая ошибка, вот МК и незапускается??
Уберите это:
Код
//Enable RESET
m_pRSTC->RSTC_RCR = 0xA5000008;
m_pRSTC->RSTC_RMR = 0xA5000001;
Вешалка же натуральная - сначала дернули внешний ресет, а затем тут же подключили его как источник собственного.
Даже если просто взвести USRTEN, пока не кончился внешний сброс (бит NRSTL регистра RSTC_SR в нуле), процессор гарантированно не запустится.
sergeeff
Nov 2 2009, 17:55
Если программа не запускается, надо:
1. Сделать ее максимально простой (минимум текста)
2. Четко локализовать, что работает, что нет.
Я вам привел пример минимальной программы, которая позволяет удостовериться в том, что программа стартовала и дошла до бесконечного цикла (в котором и остается). Вы должны, при этом четко понимать, что до вызова main() выполняется startup модуль, написанный на ассемблере. Соответственно, если не вызывается main() возможны варианты:
1. Не стартует startup модуль вообще.
2. Программа виснет где-то в промежутке до вызова main().
3. Не происходит передача управления из startup'a в main.
Поколдовав немного, можно четко локализовать где что виснет, а затем покумекать по какой причине.
alexan300
Nov 2 2009, 18:04
Цитата(aaarrr @ Nov 2 2009, 20:29)

Даже если просто взвести USRTEN, пока не кончился внешний сброс (бит NRSTL регистра RSTC_SR в нуле), процессор гарантированно не запустится.
спасибо большое..но все равно не запускается((
хотя симуляция и компиляция без ошибок.
Цитата(sergeeff @ Nov 2 2009, 20:55)

Поколдовав немного, можно четко локализовать где что виснет, а затем покумекать по какой причине.
программа простая как 3 копеики, моргания 8 ноги.
трудно локализовать что работает, ибо джатага я не имею пока( а без него внутресхемную отладку мне не сделать.
имею только юсб, если старт идет с адреса 200000 то загружается внутренний загрузчик и плата определяется системои , как только я прописываю что то в адреса от 100000, то самба показывает что все записалось, и ошибок нет.
при эмуляции в iar все шеколадно, программа доходит до бесконечного цикла и выполняет все задержки.
но вот все в железе((((ноль!
sergeeff
Nov 2 2009, 18:31
Первый вам вопрос - а что вы прописываете с адреса 100000? Вы туда пропишите те самые команды - зажечь led и закрутиться в бесконечном цикле. Если это не будет работать, значит вы туда не передаете управление. И бросьте вы ссылаться на всякие jtag'и. На заре появления микропроцессоров их в помине не было и ничего, отлаживали и без них. А программная эмуляция - она и есть эмуляция.
Да, кстати, может свой startup продемонстрируете?
alexan300
Nov 2 2009, 18:40
Цитата(sergeeff @ Nov 2 2009, 21:31)

Первый вам вопрос - а что вы прописываете с адреса 100000? Вы туда пропишите те самые команды - зажечь led и закрутиться в бесконечном цикле. Если это не будет работать, значит вы туда не передаете управление. И бросьте вы ссылаться на всякие jtag'и. На заре появления микропроцессоров их в помине не было и ничего, отлаживали и без них. А программная эмуляция - она и есть эмуляция.
ДА! если я правильно понял то управление передать можно нажатием однои из следующих кнопок :
DISABLE BRAWN OUT DIREKTOR
DISABLE BRAWN OUT RESET
ENABLE BRAWN OUT DIREKTOR
ENABLE BRAWN OUT RESET
ENABLE FLASH ACSESS
ERASE ALL FLASH
Ну последений пункт ясен, обнулить.
предпоследнии похож на запуск программы из флеш--его я использовал тоже
что же за "коричнивые директоры как перевел мне переводчик, мне не ясно..
подскажите плз, при какие обстоятельствах надо задеиствовать эти кнопки ??
startup ээээ...а какое у него расширение?? в книге Редькина не нашел ничего про это..
там указано..для таго что бы перевести МК в выполнение программы из флеш, выберети пункт Bootfrom flash у меня нету одноименнои кнопки((
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.