|
Освоение ADuC7060 |
|
|
|
Jul 13 2010, 22:16
|
Группа: Участник
Сообщений: 8
Регистрация: 13-07-10
Пользователь №: 58 434

|
Добрый день.
Недавно начал осваивать сабж, для меня это первый опыт работы с ARM-ми. В качестве инструментария выбрал WinARM. Посмотрел примеры, которые идут с ним. По похожести контроллера самый близкий пример там для ADuC7020. Как я понял из этого примера, чтобы скомпилировать прогу под 7060, мне понадобятся кое-какие файлы, типа ADuC7060.h, ADuC7060-RAM.ld, ADuC7060-ROM.ld, может еще что-то... ADuC7060.h я нашел в интернетах, а вот с файлами *.ld пока туговато. Если в make-файле я поменяю SUBMDL = ADuC7020 на SUBMDL = ADuC7060, то естественно проект перестает компилироваться, требуя эти файлы. Не могло бы уважаемое сообщество помочь мне разобраться, как имеющуюся прогу под 7020 переделать на 7060?
|
|
|
|
|
Jul 13 2010, 23:50
|

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

|
Цитата(Sargass @ Jul 14 2010, 09:16)  Как я понял из этого примера, чтобы скомпилировать прогу под 7060, мне понадобятся кое-какие файлы, типа ADuC7060.h, ADuC7060-RAM.ld, ADuC7060-ROM.ld, может еще что-то... Вы можете пересохранить под этими названиями имеющиеся файлы и исправить их под ADuC7060. Цитата(Sargass @ Jul 14 2010, 09:16)  ADuC7060.h я нашел в интернетах А вы уверены, что он писан под ваш компилятор? Цитата(Sargass @ Jul 14 2010, 09:16)  а вот с файлами *.ld пока туговато. Вам нужно один раз прочитать документацию на линкер. Вероятнее всего вам потребуется лишь изменить размер памяти кристалла в секции MEMORY в начале файла.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 15 2010, 07:09
|
Группа: Участник
Сообщений: 8
Регистрация: 13-07-10
Пользователь №: 58 434

|
Цитата(IgorKossak @ Jul 14 2010, 05:43)  Выбрали самый древний из существующих. Какой посоветуете из бесплатных и современных?
|
|
|
|
|
Jul 16 2010, 09:40
|
Группа: Участник
Сообщений: 8
Регистрация: 13-07-10
Пользователь №: 58 434

|
Цитата(Сергей Борщ @ Jul 14 2010, 03:50)  Вы можете пересохранить под этими названиями имеющиеся файлы и исправить их под ADuC7060. В общем переделал вроде бы все файлы под себя, пока прога отказывается работать. Код #include "aduc7060.h"
static void delay(const unsigned long length) { volatile unsigned long cnt; cnt = length; while (cnt > 0) { cnt--; } }
int main(void) { T1LD = 0x80; // 32,768 clock ticks T1CON = 0xC0; // Periodic mode, enable // timer, 32,768 Hz clock/1 IRQEN |= 0x10; // Enable Timer1 interrupt
// source PLLKEY1 = 0xAA; // Switch to external crystal PLLCON = 0x02; PLLKEY2 = 0x55;
POWKEY1 = 0x01; // Enter nap mode POWCON0 = 0x70; //10mhz POWKEY2 = 0xF4;
GP0DAT = 0x04000000; // P0.2 configured as an output. LED is turned on
while (1) { GP0DAT ^= 0x00040000; // Complement P0.2 delay(2000UL); } return 0; /* never reached */ } Осциллографом смотрел - на P0.2 получается постоянная еденица, на XTAL1 и XTAL0 тоже постоянные уровни, хотя по идее выбран внешний кристалл, согласно даташиту. Знач что-то не так компилируется, хотя ошибок не выдает. Понять бы что не так...
|
|
|
|
|
Jul 16 2010, 11:07
|

Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 28-07-07
Из: Кишинев
Пользователь №: 29 434

|
Цитата(Sargass @ Jul 15 2010, 10:09)  Какой посоветуете из бесплатных и современных? А про IAR (32KB KickStart edition) забыли? Для ADuC7060 (32 kB (16 kB × 16) Flash/EE memory) самое то!
|
|
|
|
|
Sep 7 2010, 07:22
|
Группа: Участник
Сообщений: 8
Регистрация: 13-07-10
Пользователь №: 58 434

|
Цитата(Шурила @ Jul 16 2010, 15:07)  А про IAR (32KB KickStart edition) забыли? Для ADuC7060 (32 kB (16 kB × 16) Flash/EE memory) самое то! Если честно, я про него и не знал, чтобы забыть) Спасибо за подсказку, поставил, попробовал - решает.
|
|
|
|
|
Sep 9 2010, 07:07
|
Группа: Участник
Сообщений: 8
Регистрация: 13-07-10
Пользователь №: 58 434

|
Понадобилось переключить aduc на внешний кристалл, в даташите пишут: Код To switch to an external crystal, users must follow this procedure: 1. Enable the Timer1 interrupt and configure it for a timeout period of >120 μs. 2. Follow the write sequence to the PLLCON register, setting the OSEL bits to [10] and clearing the EXTCLK bit. 3. Force the part into nap mode by following the correct write sequence to the POWCON register. 4. When the part is interrupted from nap mode by the Timer1 interrupt source, the clock source has switched to the external crystal.
Example source code
T1LD = 0x80; // 32,768 clock ticks T1CON = 0xC0; // Periodic mode, enable timer, 32,768 Hz clock/1 IRQEN |= 0x10; // Enable Timer1 interrupt source
PLLKEY1 = 0xAA; // Switch to external crystal PLLCON = 0x2; PLLKEY2 = 0x55;
POWKEY1 = 0x1; // Enter nap mode POWCON0 = 0x73; POWKEY2 = 0xF4; Сделал простейший код, генерирующий импульсы на P0.2, когда вставил в него приведенный кусок - импульсов нема. Ощущение, что ядро не выходит из power-down. Почитав еще немного, заметил, что хотя везде говорится про "nap mode", в примере получается не "nap" а "pause". Поменял. Не работает. В какую сторону копать?
|
|
|
|
|
Sep 20 2010, 11:53
|
Группа: Участник
Сообщений: 8
Регистрация: 13-07-10
Пользователь №: 58 434

|
Почему может не работать синхронизация PWM от внешнего сигнала? Код GP1CON = BIT9; GP2CON = BIT5 + BIT4 + BIT1 + BIT0; //Enable P2.0 & P2.1 as PWM0 & PWM5 Outputs PWMCON = BIT14 + BIT8 + BIT7 + BIT6 + BIT0; //SYNC + PWMEN + /256 PWM0COM0 = 0x190; PWM0COM1 = 0xC8; PWM0COM2 = 0x40; PWM0LEN = 0x190;
PWMCLRI=0x00;
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|