Lomach
Участник-
Постов
39 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о Lomach
-
Звание
Участник
Посетители профиля
1 184 просмотра профиля
-
Фнкция Rand будет выдавать одно и тоже число, если не использовать srand. А в srand надо записывать разные числа. По приведенной выше ссылке туда записывается time(NULL). Для контроллеров нет такой функции!!!
-
Как реализовать в кейле генератор случайных чисел для 51 контроллера? Заранее спасибо.
-
Как прошить STM32F103
Lomach опубликовал тема в ARM, 32bit
Как прошить контроллер STM32F103 в комплекте STM32-P103 фирмы olimex без программатора, через какие-нибудь кабели -
К контроллеру Mega64 подключена внешняя память данных. Как в IAR записать байт во внешнюю память по определенному адресу, а также считать байт по определенному адресу. В Keil это делается очень просто через XDATA. А как сделать в IAR?
-
Вот собственно и вся инициализация : 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 должен тоже работать.
-
Память FM25256B Не могу сказать где. В симуляторе проходит. А в железе-виснет.
-
Пробывал так. Почему-то зависает 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 управляю.
-
А как сделать такую вещь: CS=0 байт CS=1 CS=0 байт байт байт CS=1 Это шлется подряд.
-
Использую аппаратный 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, но как чего-то не пойму.
-
из Вашего кода: функция 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 Соответственно скорее всего будет выходить по таймауту. А откуда это взяли, что нада еще вводить этот таймаут?
-
Пробовал менять местами. Все тоже самое.
-
Аппартаный 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, хотя запись происходит ВЕРНО! Что не верно???
-
Спасибо. Программный TWI заработал, а вот с аппаратным проблемы!
-
Контроллер-МАСТЕР Как сконфигурировать ножку TWD для программного TWI ? Если как выход, то как она поведет себя когда слэйв устройство подсаживает ее на 0 и в этот момент нада прочитать ее (проверить)?
-
Алгоритм программирования частоты TWI
Lomach опубликовал тема в ARM, 32bit
Как программируется частота TWI в AT91sam7x? Какой алгоритм? Если можно, то функцию привести.