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

vmp

Свой
  • Постов

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

  • Посещение

Весь контент vmp


  1. Не мучайтесь, возьмите у Атмела готовый пример из software library под свой процессор. Когда запустите, можно будет дальше править.
  2. at91sam7s32 и SAMBA

    Некоторые тонкости при работе с самбой. Для запуска залоченных процессоров одного TST не хватает. Если установлена защита от считывания, то надо сначала стереть процессор, замкнув ERASE. Причем эту операцию (замыкание ERASE) нужно выполнять на включенном процессоре, если замкнуть и запустить - процессор не сотрется. Т.е. последовательность такова: 1. Включить плату 2. Замкнуть ERASE на доли секунды 3. Отпустить 4. Выключить 5. Замкнуть TST 6. Включить 7. Выждать 10 секунд (кстати, обычно хватает секунды) 8. Выключить 9. Снять перемычку TST 10. Включить и наслаждаться самбой.
  3. Кардридер acorp на команду test unit ready возвращает CSW=command failed (код 1), данные не передаются. На request sence ответ not ready, Medium not present Полный дамп ответа F0 01 02 00 00 00 00 0A 00 AA 55 41 3A 00 01 00 00 00 CSW=OK.
  4. Если в проекте присутствуют 3к переменных, которые объявляются побайтно и по отдельности, как в примере, тут поможет только полный редизайн проекта. Объединение переменных в осмысленные структуры (в том числе многоуровневые) заметно облегчает жизнь. А внутрь инициализатора структуры можно вставлять комментарии. Зато она прекрасно понимает директиву #ifdef: #ifdef __IAR_SYSTEMS_ICC__ // 64-битное целое без знака для компилятора от IAR typedef unsigned long long qword; #else // 64-битное целое без знака для компилятора Microsoft Visual C typedef unsigned __int64 qword; #endif
  5. А кто мешает при использовании структур вместо #pragma location = AUDIO_LEVEL_L __root __eeprom volatile unsigned char AU_level_l = 0x80; написать #pragma location = MY_EEPROM_START __root __eeprom volatile MY_EEPROM_T my_eeprom = {0x80, 0x1234 и т.д.}; ?
  6. Хелпа по ИАРу под рукой не оказалось. Из MSDN:
  7. Типичная проблема с printf в IAR на мелких контроллерах - нехватка стека. По умолчанию стандартный printf создает на стеке очень большой буфер, который не помещается в отведенную под стек область. Смотрите документацию на свой компилятор, как в нем задается, какую версию printf использовать. Для AVR есть еще одна проблема - в каком адресном пространстве располагать строку формата. В этом случае читайте про printf_P.
  8. Речь идет об ARM? Просто открывай и все, никакой конвертации из 5.2 в 5.4 не требуется.
  9. Вообще-то при таких условиях задачи я бы посмотрел на изохронный режим передачи. Там более или менее гарантируется полоса пропускания.
  10. Вот пример: http://www.ancud.ru/catalog/catalog-net.html#2
  11. Тут уже ничего не подскажу - проблема явно не с железом, а с софтом, так что надо пытать специалистов по линуксу.
  12. Нет только данных или тактов тоже?
  13. Тихоходный SPI на SAM7

    Раз SPI в режиме slave, то и передавать им можно. Остается только тактовый сигнал сделать, например от таймера (аппаратно или программно по прерываниям) или от UART (выдавать на него последовательность чего-то вроде 0x55 или 0xF0).
  14. А зачем запускать в Кейле Иаровские примеры? Не проще ли сразу взять пример под Кейл: http://www.atmel.com/dyn/resources/prod_do...t91sam7s-ek.zip
  15. Почему бы не взять за основу какой-нибудь атмеловский пример по работе с USB? Запустить его, посмотреть как он работает, а затем уже дорабатывать под свои нужды. Там пока дойдет дело до RXSETUP, надо еще кучу событий обработать.
  16. Из-под виндов есть как минимум 2 способа: Прямой доступ к устройству (читать MSDN на тему CreateFile): sprintf(path, "\\\\.\\PhysicalDrive%d", devno); hDisk = CreateFile(path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, NULL); if (hDisk == INVALID_HANDLE_VALUE) { return 1; } if (!DeviceIoControl(hDisk, FSCTL_LOCK_VOLUME, // dwIoControlCode NULL, // lpInBuffer 0, // nInBufferSize NULL, // lpOutBuffer 0, // nOutBufferSize &BytesReturned, // number of bytes returned NULL)) // OVERLAPPED structure { CloseHandle(hDisk); return 2; } return 0; int WriteSect(int sect, void *buf) { DWORD NumberOfBytesWritten; if (SetFilePointer(hDisk, // HANDLE hFile, sect * 512, // LONG lDistanceToMove, NULL, // PLONG lpDistanceToMoveHigh, FILE_BEGIN) // DWORD dwMoveMethod == -1) { return 1; } if (!WriteFile(hDisk, // HANDLE hFile, buf, // LPVOID lpBuffer, 512, // DWORD nNumberOfBytesToRead, &NumberOfBytesWritten, // LPDWORD lpNumberOfBytesRead, NULL)) // LPOVERLAPPED lpOverlapped { return 2; } if (NumberOfBytesWritten != 512) { return 3; } return 0; } И более хитрый способ для работы с файловой системой без файловой системы. Берем карту памяти, форматируем на писишке в FAT, создаем один большой файл во всю свободную область. В этом случае файл получается непрерывный. В начало файла пишем какую-нибудь уникальную сигнатуру + доп информацию типа размера файла. В устройстве при запуске сканируем карту в поисках сигнатуры. Найдя ее - имеем начало файла и размер. Далее просто читаем или пишем данные, не трогая заголовок. В итоге устройство ничего не знает о файловой системе, а на писюке можно работать с файлами стандартными способами.
  17. Записать обязательно через SAM7X или просто записать? Если просто записать, то берем подходящий кардридер и (если винды) WinHex. В винхексе меню tools -> clone disk. Если линукс - уже рассказали. Если именно через SAM7X, то берем за основу пример USB Mass Storage от Атмела, подключаем к нему работу с SD и получаем тот же кардридер. Что делать далее - уже написал.
  18. А без отладчика (не при пошаговом выполнении) входит? Бывает, что отладчик при чтении регистров периферии сбрасывает запрос на прерывание.
  19. Неспешно ищу дополнительую работу в Зеленограде или в Москве. Предлагаю разработку архитектуры, схемотехники и (или) программного обеспечения встраиваемых устройств. Обладаю большим опытом разработки устройств на различных микроконтроллерах (MCS-51, AVR, MSP430, ARM7, ARM9 и др.), с интерфейсами USB (как device, так и host), PCI и PCI express, ATA и Serial ATA. Много работал с криптографическими алгоритмами. Интересует удаленная работа с периодическими контактами с заказчиком. E-mail: [email protected] Примечание: Данный поиск дополнительной работы не вызван никакими проблемами с основной работой. На ней все в порядке, работа идет, зарплата регулярно платится (ттт). Просто ищется подработка в свободное время.
  20. Питание AT91SAM9XE512

    Схемы пока нет (а если будет - то там довольно сильная специфика), а в качестве идеи можно взять например кусок из схемы питания SAM9G20, испытывающего те же самые проблемы. Он приведен в даташите rev.B. Возможно есть в более позднем и в схеме eval kit - не проверял.
  21. Питание AT91SAM9XE512

    По другому. У нас вход питания довольно хитро сделан. Сейчас сделали временное решение, которое позволяет работать не во всех режимах. Дальше будем делать более правильный вариант с жесткой последовательностью включения.
  22. Питание AT91SAM9XE512

    Стабилизатор - TPS79501, супервизор - TPS3306-18, оба от TI. До программы дело не доходило - процессор не пускался. Должен был запуститься начальный загрузчик из масочного ПЗУ. Был проведен чистый эксперимент - на исправной плате снят старый процессор и запаян новый (корпус QFP, так что проблемы были не в пайке). После доработки последовательности включения процессор запустился.
  23. Питание AT91SAM9XE512

    Вчера запускал устройство с новой партией AT91SAM9XE512 (date code 0917). Оказалось, что эта партия процессоров более критична к последовательности включения питания, чем предыдущая (0751). На плате у меня стоял простой стабилизатор на питание ядра, запитанный от тех же 3.3 вольт, что и Vio процессора. На Reset стоял супервизор, мониторящий оба напряжения. Старые стартовали нормально, новые - отказались. Сильно грелись, просаживали питание. После того, как стал включать Vio только после Vcode - запустились. Так что соблюдайте последовательность подачи питаний!
  24. умножение для ARM7

    Что-то вы не так делаете: ############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 08/Oct/2009 12:55:42 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # [i](путм поскипаны)[/i] ############################################################################## \ In segment CODE, align 4, keep-with-next smull.c 1 long long mysmull(long a, long b) 2 { 3 return (long long)a * b; \ ??mysmull: \ 00000000 9021C3E0 SMULL R2,R3,R0,R1 \ 00000004 0200A0E1 MOV R0,R2 \ 00000008 0310A0E1 MOV R1,R3 \ 0000000C 1EFF2FE1 BX LR ;; return 4 } Maximum stack usage in bytes: Function CSTACK -------- ------ mysmull(long, long) 0 Segment part sizes: Function/Label Bytes -------------- ----- mysmull(long, long) 16 Others 4 20 bytes in segment CODE 16 bytes of CODE memory (+ 4 bytes shared) Errors: none Warnings: none P.S. На 5.20 - то же самое. Код должен генериться для режима ARM, в THUMB делается вызов библиотечной функции.
×
×
  • Создать...