roboforum.ru

Технический форум по робототехнике.

-= Александр =- [Всякие интересные вещи]

Блоги посетителей.
Правила форума
В данном разделе каждый может иметь не более одной темы. Тема должна начинаться с логина (ника) робофорума.

Re: -= Александр =- [Всякие интересные вещи]

Сообщение -= Александр =- » 06 мар 2010, 19:30

Я их смотрел, но так и не понял - это просто конвертер или там внутри еще и прошивка есть? Если да - то как его программировать?
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: -= Александр =- [Всякие интересные вещи]

Сообщение Michael_K » 06 мар 2010, 20:04

эмм... что за...
программировать vlsi не нужно.
а прошивка там есть почти наверняка.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: -= Александр =- [Всякие интересные вещи]

Сообщение -= Александр =- » 07 мар 2010, 14:22

А как и зачем там всякие UARTы, GPIO и прочие прибамбасы? Или ими можно с внешней шины рулить?
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: -= Александр =- [Всякие интересные вещи]

Сообщение Michael_K » 07 мар 2010, 14:23

ага, можно
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: -= Александр =- [Всякие интересные вещи]

Сообщение -= Александр =- » 07 мар 2010, 14:29

Ну, это все резко упрощает... Можешь показать какой-нить примерчик как с ним вообще работать?
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Как я осваивал ARM

Сообщение -= Александр =- » 25 окт 2010, 12:48

Постановка задачи

Решил писать сюда - самому полезно будет, да и другим пригодится.
Давно уже я смотрел в сторону контроллеров ARM и вот наконец-то появилась задачка как раз под них. Не буду вдаваться в подробности - делаем мы такой вот ящик:

automat.jpg


(это немного другой ящик, но суть та-же)
В нем будет несколько модулей ацп и связь с компом через езернет. Собственно мне поручили обслуживать эти ацп (с цифровой стороны) и делать связь. В первом случае нужен вагон быстрой памяти (16 мб), а во втором - собственно езернет с хорошей скоростью (минимум 5 мбит/с). Ни то ни другое AVRкой не провернуть.
В первом случае все очень специфично - решено было делать свою плату на LPC2478 и динамической памяти. А для связи была куплена готовая плата SK-MLPC2368 и посажена на болванку для втыкания в крейт.
Изображение
Внутри крейта кстати говоря шина SPI. Ну в общем процесс пошел...

Часть первая - Wiggler

С самого начала не обошлось без пляски с бубном. Схем виглера в сети куча, но вот что с ним делать - понятно не сразу. Сделал я его, поставил Keil uVision 4 и долго бродил по настройкам - ничего там естественно не нашел. Пошел гуглить и нагуглил прогу H-JTAG - и о чудо - она поддерживает виглера! Снова иду в настройки кейла - снова не могу понять как подружить его с этой тулзой. Тыркаюсь по менюшкам - и иду гуглить дальше. Оказалось что из настроек H-JTAG можно пропатчить Keil чтоб они подружились. И наконец-то удалось все это запустить вместе. Скомпилил примерчик с диска SK-MLPC2368 - запустил его в дебак - все работает. А вот как шить во флэш - это уже другая история. В комплекте к житагу идет еще и H-Flasher. Сейчас я прошиваю через него. А вот как прошить через него прямо из Кейла - я так и не разобрался. Видимо никак... Кстати H-JTAG можно настроить на нужные пины LPT-порта и использовать STK200 заместо виглера...
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: -= Александр =- [Всякие интересные вещи]

Сообщение -= Александр =- » 25 окт 2010, 17:21

Часть вторая - Ногодрыганье.

Естественно после работающего примерчика захотелось чего-то своего написать... Для начала подрыгать ногой ввода-вывода. Сказано - сделано: нога дрыгается. Чего дальше делать? Естественно посмотреть насколько быстро ей можно дрыгать! вот тут-то и случились первые грабли... Частота АРМа задается через цепочку ФАПЧ - тоесть частота кварца сначала умножается на некое число, затем делится на другое число и попадает в ядро. Частоты переферии задаются похожим образом. Только умножается она на 2М, а не на М, как я думал. В итоге получил по зубам: житаг проц не видит, прошить не может. Менял кварц на вдвое меньший - житаг видит через раз, прошить не может. Я уж думал что копец - но вспомнил что можно запустит бутлоадер - в нем проц работает от внутреннего генератора. Запустил (Р2.10 на землю при подаче питания) - ура! житаг его увидел! Но не шьет... Выяснилось что при прошивании он его выкидывает из бутлоадера и снова переходит на кварц. Пришлось качать FlashMagic и шить через бутлоадер по UART0. Поправил частоту, прошил - все заработало!
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: -= Александр =- [Всякие интересные вещи]

Сообщение -= Александр =- » 03 ноя 2010, 15:24

В общем теории и примеров по ARMам в сети хватает, так что буду описывать только всякие грабли и трудно-понимаемые вещи.

Часть третья - SPI в режиме Slave

Одна из плат у меня работает как мост SPI-ETH, в ней все получилось просто и с первого раза. Настроил SPI, написал функцию отправки данных - все работает. Выглядит так: (LPC2368)

Код: Выделить всёРазвернуть
void init_spi(void)
{
  PCONP |= (1 << 8);   //Power ON
  /* Configure Pin Connect Block */   
  PINSEL1|=0x0000003C; //MOSI & MISO
  PINSEL0|=0xC0000000; //SCK
     
  /* Set to highest speed for SPI at 10 MHz- > 1.25 MHz */
  //S0SPCCR=0x8;
   
  /* Device selected as master */
  //SPI Mode 3:
  //CPOL=1
  //CPHA=1
  //MASTER mode
  //MSB first
   
  S0SPCCR= 32;     //SPI clk = PCLK_SPI/S0SPCCR
  S0SPCR = 0x0838;  //830
   
}

char spi(char data)
{ char data_in;
  /* Write data out */
  S0SPDR=data;
  /* Wait for transfer to be completed */
  while ( !(S0SPSR & SPIF) );
  data_in=S0SPDR;
  return data_in;
}


Вторая плата - слэйв - там все не так просто. Слэйв не знает, когда ему придут данные, так что работает по прерыванию. Читаю мануал - пишу код - и нифига. Первый раз прерывание происходит - и тишина... При том другие прерывания работают.
После приема картина такая:

S0SPSR=0xC0
Тоесть Write collision

Если отправлять еще - прерывания не происходит, зато вылазит вот это:
S0SPSR=0xE0
Тоесть Write collision + Read overrun

Что эта хрень значит и как с ней бороться?

После долгой пляски с бубном - выяснил. Надо сначала читать статус, а затем данные...
После этого код заработал как надо!

Код: Выделить всёРазвернуть
void SPI0Handler (void) __irq
{
  DWORD regValue;
  unsigned int data_spi;
 
  if (S0SPSR);                  // (dummy) read status register

  data_spi = S0SPDR;             // read data received
  S0SPDR   = spi_counter;        // next data to transmit

  S0SPINT  = 0x01;               // reset interrupt flag
  VICVectAddr = 0;               // reset VIC


  SPIdata=data_spi;
  SPIflag=1;
  spi_counter++;
}

void init_SPI( void )
{
  PCONP |= (1 << 8);   //SPI0 Power ON
  //S0SPCR = 0x00;
  PINSEL0|=(1U<<30)|(1U<<31); //SCK
  PINSEL1|=(1U<<0 )|(1U<<1 ); //SSEL
  PINSEL1|=(1U<<2 )|(1U<<3 ); //MISO
  PINSEL1|=(1U<<4 )|(1U<<5 ); //MOSI
  S0SPCCR = 0x8;       //Clock select - max clock speed = PLCK/8
  S0SPCR = 0x089C;       // 8 bit, CPHA=1, CPOL=1, slave mode, LSB first, interrupt enabled
           //0898
  if ( install_irq( SPI0_INT, (void *)SPI0Handler, HIGHEST_PRIORITY) == FALSE ) //Install IRQ
    {
   printf("SPI IRQ install error!\n");
   while(1);
    }
 
}
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: -= Александр =- [Всякие интересные вещи]

Сообщение galex1981 » 05 ноя 2010, 01:26

С I2C слейвом разобрался?
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: -= Александр =- [Всякие интересные вещи]

Сообщение -= Александр =- » 03 май 2011, 02:13

Давно я сюда не заглядывал... Да, там все нормально получилось и уже работает. Если интересно - покажу код (оно у меня на работе).

Добавлено спустя 7 минут 13 секунд:
Еще по поводу ARMов - недавно закончил долгострой - плата с LPC2478 и внешней SDRAM на 32 мегабайта. Можете и на эту тему меня расспрашивать - там тоже хватало подводных камней...
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Пред.

Вернуться в Блоги

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8