Перейти к содержанию
    

SmileGobo

Участник
  • Постов

    26
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о SmileGobo

  • Звание
    Участник
    Участник
  1. LPC23xx DMA Burst Size|Transwer width

    И так я использую LPC2378 и пересылаю данные через SSP0 с помощью DMA. Мне необходимо пересылать 24 разрядное слово, оно укладывается в int. Пример входное слово в массиве для DMA контроллера 0xFFF00FFF таким образом я пересылаю 24 бита: 11111111111111111111111 Проблема в том что я не могу понять что значат парметры Burst Size и Transfer width я их пробовал по разному в итоге вместо 512 элементов мне выплевывает только 256 причем по всей видимости только старшие.
  2. У этой переферии два буффера по слов 8(16 битных), регистр данных тоже 16 битный, что происходит если я пишу туда только байтами пример из кейла: void SSP0Send( BYTE *buf, DWORD Length ) { DWORD i; for ( i = 0; i < Length; i++ ) { /* as long as TNF bit is set (TxFIFO is not full), I can always transmit */ while ( !(SSP0SR & SSPSR_TNF) ); SSP0DR = *buf; buf++; /* Wait until the Busy bit is cleared */ while ( !(SSP0SR & SSPSR_BSY) ); } return; } main(){ BYTE buf[8]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; SSP0Send(buf,8); } У меня буффер на передачу будет забит таким образом: 0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0,0xFF,0 или я не так что-то понимаю?
  3. Keil+LPC1768+64KB SRAM

    Потому что, когда юзаешь динамическую память надо думать - люди не любят думать и все что связанно с этим процессом называют бякой
  4. 2 Forger ну на нет и суда нет. И что я не хочу конкретно искать? Про реализацию паттернов или про реализацию списков? Я это и так прекрасно знаю, зачастую, эти реализации требуют динамическую память, ее мне использовать не хочется. В ссылках что вы преводили выше про отложенную инициализацию на плюсах примера вобще нет, а суть как и в паттерне синглтон, что опять требует памяти. Да и в целом все эти предложения не решают моей проблемы.
  5. Да кой черт мне эти списки? =) Лучше поделитесь вашей библиотекой, если можно, я ваш код поизучаю))) Микролиб не юзаю - она плюсов не держит. Callstack погляжу в обед.
  6. 2 Forger Чтобы использовать отложенную инициализацию мне нужна динамическая память, а ее я бы не хотел использовать, так как не знаю сколько мне ее потребуется. Если вы мне подскажите методику как можно расчитывать heap при использовании задданого колличества классов и объектов. Собственно про умные книжки по плюсам хотелось больше конкретики. кроме шаблона синглотон, я тут пытаюсь реализовать шаблон реестра. Но опять для реализации этих шаблонов нужна динамическая память. Поэтому пытаюсь все делать статически Так же я не использую ОС вообще... 2 Сергей Борщ А зачем не вобще нужен обработчик програмного прерывания? А за пошаговую отладку по конструктору что-то не догадался, пойду прогоню После перехода по адресу __main отладчик перестает выполнятся по шагам IMPORT __main LDR R0, =__main BX R0 а по принудительной остановке висит тут: SWI_Handler B SWI_Handler Что касается массива объектов, то он вполне себе проинициализирован, хотя до конструкторов дело не дошло. Я в недоумении.
  7. Написал класс- абстракцию для UART class UART:public Peripheral{ //byte buf[8]; protected: enum { RBR=0,THR=0,DLL=0,DLM=1,IER=1,IIR=2,FCR=2,LCR=3, LSR=5,SCR=7,ACR=8,ICR=9,FDR=10,TER=12 }; static UART DEV[UART_SIZE]; public: //UART(UARTName name,UARTOption *Option = (UARTOption *)NULL); UART(UARTName name); ~UART(); void Init(UARTOption* Option); uint GetState() const; uint GetIntStatus() const; void ClearInt(); bool Read(byte* buf,const uint& size); bool Send(byte* buf,const uint& size); void ClearRxFIFO(); void ClearTxFIFO(); static UART* GetUART(uint num); }; Инициализирую статическую переменную: UART UART::DEV[]={UART(UART_0),UART(UART_1),UART(UART_2),UART(UART_3)}; И в этом случае программа валится в програмное прерывание, я так понимаю до main() невозможно вызвать свой код? Или же можно как-то проинициализировать статический экземпляр класса??? Стандартные типы инициализируются на ура, а вот с объектами проблема. среда KEIL uVision 4.10 гонял на симуляторе
  8. Изучал хидер файл LPC23xx.H ,который идет в поставке с KEIL обнаружил странную вещь в UART Разные регистры задефайнены на одни и теже адреса: /* Universal Asynchronous Receiver Transmitter 0 (UART0) */ #define UART0_BASE_ADDR 0xE000C000 #define U0RBR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x00)) //0xE000C000 #define U0THR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x00)) //0xE000C000 #define U0DLL (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x00)) //0xE000C000 #define U0DLM (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x04)) //0xE000C004 #define U0IER (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x04)) //0xE000C004 #define U0IIR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x08)) //0xE000C008 #define U0FCR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x08)) //0xE000C008 #define U0LCR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x0C)) #define U0LSR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x14)) #define U0SCR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x1C)) #define U0ACR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x20)) #define U0ICR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x24)) #define U0FDR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x28)) #define U0TER (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x30)) По документации эти регистры находятся в одних и тех же адресах. И никак не могу взять в толк, как процессор определят, какие значения для каких регистров я ему задаю???
  9. ARM7 CMSIS?

    http://mbed.org/forum/mbed/topic/518/?page=1#comment-9113 Там в теме есть проект под кейл, но под 1768 пытался его перенастроить под 2368 опять ругается на 6235E: More than one section matches selector - cannot all be FIRST/LAST. Если выкинуть скаттер то ругается что не описанна секция. Ктонибудь может объяснить что вобще эти строчки значат? ER_IROM1 0x00000000 0x80000 {; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } ЗЫ в проекте нет стартап файла *.s
  10. ARM7 CMSIS?

    ну собственно в mbed все в таком виде и построенно, правда не удается собрать с ним проект под кейл 4 ругается на скатер файл D:\mbed\LPC2368\LPC2368.sct(4): error: L6235E: More than one section matches selector - cannot all be FIRST/LAST. LR_IROM1 0x00000000 0x80000 { ; load region size_region ER_IROM1 0x00000000 0x80000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x40000120 0x7EE0 { ; RW data, inc space for realmonitor .ANY (+RW +ZI) } RW_IRAM2 0x7FD00000 0x2000 { ; RW data, USB RAM .ANY (AHBSRAM0) } RW_IRAM3 0x7FE00000 0x4000 { ; RW data, ETH RAM .ANY (AHBSRAM1) } RW_IRAM4 0xE0038000 0x0800 { ; RW data, CAN RAM .ANY (CANRAM) } RW_IRAM5 0xE0084000 0x0800 { ; RW data, RTC RAM .ANY (RTCRAM) } } даже не знаю куда копать
  11. ARM7 CMSIS?

    Я собственно для каждого класса переферии думаю использовать структуру с набором полей соотвествующих адресам регистров, а ее отображать на задефайненный базовый адрес переферии. соотвественно гипотетический интерефейс функций Read и Send uart bool Read(UartAddrBase addr,byte* data,uint size); bool Send(UartAddrBase addr,byte*data,uint size); ну вот гляжу доку на этот mbed оч занималтельно наглядно и красиво +)))) но на классах Я классы остерегаюсь применять - боюсь производительность потерять, но очень хочется. Хотя описанный мной подход не сильно отличаетсяот ООП подхода.
  12. ARM7 CMSIS?

    Прошу прощения перепутал ники, а ссылка не завилась - инет корявый. Почему утопия как раз я и хочу получить API на семейство(оно ведь довольно популярное), может этот минимильные API уже кто-то сделал. Не хочется изобретать велосипед, потому как я боюсь в этом закопатся. Но гипотетически я все же склонен написать такую штукую. Проблема в том, что я не знаю в какую сторону смотреть: реализовывать это на классах(я больше прикладник), или на структурах и фнукциях. Может кто предложить вменяемую архитектуру исходя из своего опыта?
  13. ARM7 CMSIS?

    Ага отличное решение, так и делаю и такой подход прекрасно запутвает код, мне нужна корректная абстракция. Надоело переписывать код то под один УАРТ, то по под другой, та же история с таймерами, и прочей перефирией. Я разделил как мог на модули, и путаница просто в каждом модуле, но это меня не устраивает. 2 scifi Ваша ссылка ведет в никуда =(. Но будем искать
×
×
  • Создать...