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

Lomach

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

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Участник
    Участник

Посетители профиля

1 179 просмотров профиля
  1. Случайные числа

    Фнкция Rand будет выдавать одно и тоже число, если не использовать srand. А в srand надо записывать разные числа. По приведенной выше ссылке туда записывается time(NULL). Для контроллеров нет такой функции!!!
  2. Случайные числа

    Как реализовать в кейле генератор случайных чисел для 51 контроллера? Заранее спасибо.
  3. Как прошить STM32F103

    Как прошить контроллер STM32F103 в комплекте STM32-P103 фирмы olimex без программатора, через какие-нибудь кабели
  4. Внешняя память данных и IAR

    К контроллеру Mega64 подключена внешняя память данных. Как в IAR записать байт во внешнюю память по определенному адресу, а также считать байт по определенному адресу. В Keil это делается очень просто через XDATA. А как сделать в IAR?
  5. SPI на AT91sam7x

    Вот собственно и вся инициализация : PIO_Configure(pinsSPI0, PIO_LISTSIZE(pinsSPI0)); SPI_Configure(AT91C_BASE_SPI0,AT91C_ID_SPI0,AT91C_SPI_MSTR); SPI_ConfigureNPCS(AT91C_BASE_SPI0,0,AT91C_SPI_SCBR); SPI_Enable(AT91C_BASE_SPI0); PIO_Configure(&CS, 1); PIO_Configure(&HOLD, 1); PIO_Set(&HOLD); Микросхема пятивольтовая, но питаю от 3.3 В. Программный SPI работает, поэтому думаю и аппаратный должен тоже работать. TWI аппаратный с глюками но работает при питании переферрии от 3.3 В. Т.е. и SPI должен тоже работать.
  6. SPI на AT91sam7x

    Память FM25256B Не могу сказать где. В симуляторе проходит. А в железе-виснет.
  7. SPI на AT91sam7x

    Пробывал так. Почему-то зависает SPI. вот процедуры посылки и приема байта. void SPI_Write(AT91S_SPI *spi, unsigned int npcs, unsigned short data) { while ((spi->SPI_SR & AT91C_SPI_TXEMPTY) == 0); spi->SPI_TDR = data | SPI_PCS(npcs);//| AT91C_SPI_LASTXFER; while ((spi->SPI_SR & AT91C_SPI_TDRE) == 0); } unsigned short SPI_Read(AT91S_SPI *spi) { while ((spi->SPI_SR & AT91C_SPI_RDRF) == 0); return spi->SPI_RDR & 0xFFFF; } Соответственно еще cs управляю.
  8. SPI на AT91sam7x

    А как сделать такую вещь: CS=0 байт CS=1 CS=0 байт байт байт CS=1 Это шлется подряд.
  9. SPI на AT91sam7x

    Использую аппаратный SPI. Вот какая проблема: Как сделать чтобы CS можно было устанавливать в 1 или в 0 в зависимости от количества байт, т.е. Иногда нада послать всего 1 байт , а иногда 3 байта, чтобы СS между ними не менялся. CS=0 байт СS=1 CS=0 байт байт байт СS=1 У меня получается такая картина: CS=0 байт CS=1 CS=0 байт CS=1 CS=0 байт СS=1 Как-то это можно сделать используя биты CSAAT и LASTXFER, но как чего-то не пойму.
  10. из Вашего кода: функция unsigned char TWID_Write(...) ... while( !TWI_TransferComplete(pTwi) && (++timeout<TWITIMEOUTMAX) ); if (timeout == TWITIMEOUTMAX) { dbg_puts_impl("TWID Timeout TC2\n\r"); } В функции посылки unsigned char TWID_Write(...) при посылке 1 байта по сути таже самая проверка TWI_TransferComplete(pTwi), только еще таймаут проверяется, когда досчитает до TWITIMEOUTMAX 50000 Соответственно скорее всего будет выходить по таймауту. А откуда это взяли, что нада еще вводить этот таймаут?
  11. Пробовал менять местами. Все тоже самое.
  12. Аппартаный TWI AT91SAM7X

    Аппартаный TWI настроен без прерываний. Код посылки байта: int TWI_Write(unsigned char address,//FM24V10_ADDRESS unsigned int iaddress, // Адрес по которому записать unsigned int isize, // Размер внутреннего адреса ведомого устрйоства AT91C_TWI_IADRSZ_2_BYTE unsigned char *pData, // Указатель на данные, которые нада записать unsigned int num) // Количество байт для записи { unsigned int status, err=0, Counter=0; // Set internal address bytes AT91C_BASE_TWI->TWI_IADR = 0; AT91C_BASE_TWI->TWI_IADR = iaddress; // Set slave address and number of internal address bytes AT91C_BASE_TWI->TWI_MMR = 0; AT91C_BASE_TWI->TWI_MMR = isize; AT91C_BASE_TWI->TWI_MMR = (isize | (address << 16)) & ~AT91C_TWI_MREAD; AT91C_BASE_TWI->TWI_THR=*pData; AT91C_BASE_TWI->TWI_CR = AT91C_TWI_START | AT91C_TWI_STOP | AT91C_TWI_MSEN; status = AT91C_BASE_TWI->TWI_SR; while (!(status & AT91C_TWI_TXRDY)) { status = AT91C_BASE_TWI->TWI_SR; //************************************ if ((status & AT91C_TWI_NACK) == AT91C_TWI_NACK) { err++; } } ....... Происходят 2 вещи: 1. Цикл while почему-то виснит. Зацикливается. 2. Если поставить небольшую задержку в место отмеченное //****************** то вроде проходит нормально, но имеются err, хотя запись происходит ВЕРНО! Что не верно???
  13. Спасибо. Программный TWI заработал, а вот с аппаратным проблемы!
  14. Программный TWI AT91SAM7x

    Контроллер-МАСТЕР Как сконфигурировать ножку TWD для программного TWI ? Если как выход, то как она поведет себя когда слэйв устройство подсаживает ее на 0 и в этот момент нада прочитать ее (проверить)?
  15. Как программируется частота TWI в AT91sam7x? Какой алгоритм? Если можно, то функцию привести.
×
×
  • Создать...