The LPC11xx IAP provides function to call the ISP in the BootROM from user code. Here's an example of how to use it. The code is based on UART example for LPC1114 (for LPCXpresso)

The first thing is that, if you have LPC11xx UART enabled, you need to disable it, including the interrupts

static void StopUART(void)
{
  uint32_t temp;

  /* Disable UART interrupts */
  LPC_UART->IER = 0;
  /* Disable UART interrupts in NVIC */
  NVIC_DisableIRQ(UART_IRQn);

  /* Ensure a clean start, no data in either TX or RX FIFO. */
  while (( LPC_UART->LSR & (LSR_THRE|LSR_TEMT)) != (LSR_THRE|LSR_TEMT) );
  while ( LPC_UART->LSR & LSR_RDR )
  {
temp = LPC_UART->RBR; /* Dump data from RX FIFO */
  }

  /* Read to clear the line status. */
  temp = LPC_UART->LSR;
}

Then, turn on Timer32B1, GPIO and IOCON block in the SYSAHBCLKCTRL, set the stack pointer to the BootROM's requirement, and execute the IAP command 57.

typedef void (*IAP)(unsigned int[], unsigned int[]);

static void ReinvokeISP(void) {
  IAP iap_entry = (IAP) 0x1fff1ff1;
  uint32_t command[5], result[4];

  /* make sure 32-bit Timer 1 is turned on before calling ISP */
  LPC_SYSCON->SYSAHBCLKCTRL |= 0x00400;
  /* make sure GPIO clock is turned on before calling ISP */
  LPC_SYSCON->SYSAHBCLKCTRL |= 0x00040;
  /* make sure IO configuration clock is turned on before calling ISP */
  LPC_SYSCON->SYSAHBCLKCTRL |= 0x10000;
  /* make sure AHB clock divider is 1:1 */
  LPC_SYSCON->SYSAHBCLKDIV = 1;

  /* Send Reinvoke ISP command to ISP entry point*/
  command[0] = 57;

  /* Set stack pointer to ROM value (reset default).
     This must be the last piece of code executed before calling ISP,
     because most C expressions and function returns will fail after
     the stack pointer is changed.
   */

  __set_MSP(*((uint32_t *) 0x1FFF0000)); /* inline asm */

  /* Invoke ISP. We call "iap_entry" to invoke ISP because the ISP entry
     is done through the same command interface as IAP. */

  iap_entry(command, result);

  // Code will never return!
}

Lastly, before you can run your new code (assuming you are upgrading / replacing the firmware using ISP), you will need to reset the MCU.

 

В этой заметке рассмотрим полноценную FatFs от мистера ChaN (elm-chan.org) и совместную работу с картой памяти типа Secure Digital отформатированной в FAT. Для экспериментов нам понадобиться стенд с картой памяти, описанный ранее, микроконтроллер Atmega32 или что-то помощнее, например Atmega64-128 и програма Terminal 1.9 или какой-то другой монитор последовательного порта. Сразу оговоримся про использованную терминологию. Кластером (cluster) будем называть наименьший объем информации, которым оперирует файловая система. Кластер состоит из секторов или блоков (количество секторов в кластере зависит от файловой системы). Сектор или блок — минимальный объем информации, который можно хранить на носителе. В случае нашей SD карты памяти сектор равен 512 байт. Далее носитель делиться на логические диски (как С:/ и D:/ в вашей windows). Отформатированный в файловой системе логический диск называется разделом. Отметим, что FatFs может работать одновременно с 10-ю логическими дисками. Continue reading »

 

Вот и я озаботился подобной проблемой.

И так, предположим, мы имеем нужный нам BIN файл, который нормально прошивается под Windows XP/7.

При подключении под Linux LPC1343 видится как страндартный диск, к примеру на /dev/sdc, тогда команды для прошивки девайса будут следующие:

 sudo mdel -i /dev/sdc ::/firmware.bin
 sudo mcopy -i /dev/sdc firmware.bin ::/
 sudo umount /dev/sdc

В принципе, кому надо могут оформить это для удобства в скрипт.

 

Введение.

К моему великому сожалению текущая загруженность не позволила сделать этого обзора.

Почти месяц назад я получил на тестирование от сообщества Element-14 комплект Freescale MPC8308-RDB. С изделиями фирмы Freescale до сих пор знаком не был. Это первое знакомство, поэтому  оно будет более критичным, ибо сравнивать мне есть с чем. Этот обзор будет включать некоторые ресурсы позаимствованные с других сайтов и от производителя, дабы вас не утруждать постоянными ссылками и представить полный и наглядный обзор устройства.

И так приступим.

MPC8308-RDB — позиционируется как «Reference Platform», что дословно означает образцовая платформа.

Continue reading »

 

Last month, I examined some common alternatives for representing and manipulating memory-mapped devices in C.1 The techniques I presented work as well (or as badly) in C++. However, classes in C++ offer a better alternative than anything you can do in C. This month, I'll explain why.

Picking up where I left off

As I did last month, I'll use for my examples a machine with a variety of devices, including a programmable timer, which employs a small collection of device registers. The timer registers start at location 0xFFFF6000.

For simplicity, I assume that every device register is a four-byte word aligned to an address that's a multiple of four, so that you can manipulate each device register as an unsigned int or, equivalently, as a uint32_t. Since device registers are volatile entities, I typically bundle the volatile qualifier with the appropriate integer type within a typedef definition, as in:

typedef uint32_t volatile device_register;

Continue reading »

 

Конечно, можно воспользоваться уже готовыми, например: CodeSourcery G++ Lite or Yagarto, но мы не ищем легких путей!

Для чего это надо?

Лишь в новой версии GCC 4.5 появилась поддержка ARM Cortex-M0, на этом ядре сделан новый микроконтроллер от NXP — LPC11xx, который я планирую использовать в одной из своих новых разработок. Маленький, энергоэффективный, и дешевый!

Сборка.

 

Шаг 1. MinGW и MSYS

Если у вас не установлены MinGW и MSYS с возможным вариантом установки вы можете ознакомится в моем посте «Установка MinGW32 и MSYS в Windows»

Если у вас они уже установлены, необходимо проверить наличие библиотек:

 

Пытаясь подключить LCD OSD070TN84 к ICnova-AP7000-Base столкнулся со следующей проблемой: выход LCD_CC процессора AP7000 формирует PWM сигнал управления яркостью дисплея с опорной частотой ~ 68 kHz, а для дисплея требуется частота PWM от 100 до 300 Hz. Не долго думая применил ATtiny13 в качестве конвертера.

На входе имеем сигналы LCD_CC — управление яркостью и LCD_PWR выключение подсветки.

Подключение:

ATtiny13
ICnova_LCD_CC PB2
ICnova_LCD_PWR PB4
LCD_PWM PB0
MOSFET PB3

Continue reading »

 

Вступление.

В прошлой статье мы рассмотрели основные моменты начала работы с платами IC-Nova, теперь рассмотрим как работать со встроенной Flash, например, что бы заменить Uboot установленный на нашей плате на более новый.

Что же такое Uboot? Это начальный загрузчик нашей платы. Его можно сравнить с BIOS для обычного компьютера. Uboot так же тестирует память и инициализирует основные подсистемы нашей платы.

Существует два варианта обновления нашего загрузчика:

  • обновление с помощью Atmel JTAG-ICE MKII
  • обновление средствами Linux загруженного на плате

Если во время второго варианта у вас что-то пойдет не так, всегда можно прибегнуть к первому варианту, если конечно у вас есть JTAG-ICE MKII.

Continue reading »

 

AVR32_Grasshopper

Вступление.

Эта статья посвящена работе с платой ICnova AP7000 Base производства In-Circuit GmbH. Сейчас эта плата уже «устарела» и взамен выпускаются модули ICnova AP7000 OEM и ICnova AP7000 OEM Plus, но принципы остаются те же. Краткие характеристики платы:

  • AT32AP7000 процессор до 210 DMIPS на частоте 150 MHz
  • 64MB SD-RAM на 32Bit шине
  • 8MB NOR-Flash как память для программ
  • Встроенный стабилизатор на 1.8 и 3.3 вольта

Для удобства разработки нам понадобятся некоторые «инструменты».

Continue reading »

© 2011 ADTL Blog Suffusion theme by Sayontan Sinha