tenkjm
Пункты: 772
Регистрация: 09.10.2009
Подскажите пожалуйста где найти работающий пример под KEIL для выполнения программки без ОС. Нужен ли для его выполнения Bootstrap и Uboot?
rw9uao
Группа: Клиенты
Пункты: 6973
Регистрация: 26.03.2009
если входит во внутренний флэш - то не нужны.
tenkjm
Пункты: 772
Регистрация: 09.10.2009
Пробовал через u-Boot загружать и запускать проекты, скомпилированные под IAR (Examples getting started) для плат на SAM9260, так и sam 9xe512 для SDRAM.
загружал командой
Код U-Boot> loady
## Ready for binary (ymodem) download to 0x21000000 at 115200 bps...
CC
Затем
Код U-Boot> go 0x21000000
## Starting application at 0x21000000 ...
Программа не исполнялась
Для эксперимента пробовал по этому адресу загружать Bootstrup и U-boot, в таком случае программа по этому адресу стартует
..
В руководстве по U-boot описывается подобный пример (запуска standalone приложений) и при компиляции u-Boot там попутно компилируются несколько примеров типа Hello world, но в них хедеры для другой платы.
IAR скачал evaluation версию
Что может быть не так? Подскажите в каком направлении копать.
tenkjm
Пункты: 772
Регистрация: 09.10.2009
В IAR хедере board.h
Код
#ifndef BOARD_H
#define BOARD_H
//------------------------------------------------------------------------------
// Headers
//------------------------------------------------------------------------------
#if defined(at91sam9xe128)
#include "at91sam9xe128/chip.h"
#include "at91sam9xe128/AT91SAM9XE128.h"
#elif defined(at91sam9xe256)
#include "at91sam9xe256/chip.h"
#include "at91sam9xe256/AT91SAM9XE256.h"
#elif defined(at91sam9xe512)
#include "at91sam9xe512/chip.h"
#include "at91sam9xe512/AT91SAM9XE512.h"
#else
#error Board does not support the specified chip.
#endif
//------------------------------------------------------------------------------
// Definitions
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/// \page "SAM9XE-EK - Board Description"
/// This page lists several definition related to the board description.
///
/// !Definitions
/// - BOARD_NAME
/// Name of the board.
#define BOARD_NAME "AT91SAM9XE-EK"
/// Board definition.
#define at91sam9xeek
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/// \page "SAM9XE-EK - Operating frequencies"
/// This page lists several definition related to the board operating frequency
/// (when using the initialization done by board_lowlevel.c).
///
/// !Definitions
/// - BOARD_MAINOSC
/// - BOARD_MCK
/// Frequency of the board main oscillator.
#define BOARD_MAINOSC 18432000
/// Master clock frequency (when using board_lowlevel.c).
#define BOARD_MCK ((18432000 * 97 / 9) / 2)
//------------------------------------------------------------------------------
Насколько я знаю в платах starterkit частота кварца другая Как следует изменить
# define BOARD_MAINOSC 18432000 ??
Или не в этом дело?
Pavel Ivanchenko
Admin
Пункты: 92788
Регистрация: 24.03.2009
Пол: Мужчина
Попробуйте #define BOARD_MAINOSC 12000000
По другому и не должно работать ...
tenkjm
Пункты: 772
Регистрация: 09.10.2009
Уф разобрался с IAR (как выяснилось не совсем)
Т.к. кварц 12 МГц, то нужно код поправить
в board_lowlevel.c исправить на
Код /// Main oscillator startup time (in number of slow clock ticks).
#define BOARD_OSCOUNT (AT91C_CKGR_OSCOUNT & (64 << 8))
/// PLLA frequency range.
#define BOARD_CKGR_PLLA (AT91C_CKGR_SRCA | AT91C_CKGR_OUTA_2)
/// PLLA startup time (in number of slow clock ticks).
#define BOARD_PLLACOUNT (63 << 8)
/// PLLA MUL value.
#define BOARD_MULA (AT91C_CKGR_MULA & (49 << 16))
/// PLLA DIV value.
#define BOARD_DIVA (AT91C_CKGR_DIVA & 3)
/// PLLB frequency range
#define BOARD_CKGR_PLLB AT91C_CKGR_OUTB_0
/// PLLB startup time (in number of slow clock ticks).
#define BOARD_PLLBCOUNT BOARD_PLLACOUNT
/// PLLB MUL value.
#define BOARD_MULB (175 << 16)
/// PLLB DIV value.
#define BOARD_DIVB 15
/// USB PLL divisor value to obtain a 48MHz clock.
#define BOARD_USBDIV AT91C_CKGR_USBDIV_2
/// Master clock prescaler value.
#define BOARD_PRESCALER AT91C_PMC_MDIV_2
a в board.h
Код /// Frequency of the board main oscillator.
#define BOARD_MAINOSC 12000000
/// Master clock frequency (when using board_lowlevel.c).
#define BOARD_MCK ((12000000 * 50 / 3) / 2)
работает для flash и SRAM Теперь осталось SDRAM