Jump to content

    

XMEGA еще жива?

Могу ли я объявить MOSI как выходной пин и зажигать им светодиод?

А проверить физически не на чем?

Попробуйте поэкспериментировать в симуляторе АВР студии. MOSI в любом случае должен быть объявлен как выход.

С другой стороны, если к SPI подключен только термометр и никаких высокоскоростных устройств, что мешает сделать программную реализацию SPI? Там ведь все совсем не сложно, у вас исчезнет только возможность работы по прерыванию, что в случае с термометром непринципиально

 

Share this post


Link to post
Share on other sites

Физически не получилось, поэтому и полез в документацию и на форум в надежде найти подтверждение, что и не должно работать.. Или у всех работает, а только у меня не работает. Обойти сложившийся казус через SPI собственного производства конечно же можно)

Share this post


Link to post
Share on other sites

На XMEGA не получится использовать незадействованные ноги SPI, если SPI активен.

 

Share this post


Link to post
Share on other sites

Всем привет! Очередной затык.. теперь с UART. Кому-нибудь удавалось менять скорость UART после его инициализации. В документации написано, что это возможно в том случае, когда передача и прием полностью завершены. Контролирую флаги в статусном регистре - на передачу (5 бит) в 1, на прием (7 бит) - 0. Пытаюсь сменить скорость и ничего не получается, UART работает со старой. Может кто ткнет носом, куда посмотреть?..

Share this post


Link to post
Share on other sites
Всем привет! Очередной затык.. теперь с UART. Кому-нибудь удавалось менять скорость UART после его инициализации. В документации написано, что это возможно в том случае, когда передача и прием полностью завершены. Контролирую флаги в статусном регистре - на передачу (5 бит) в 1, на прием (7 бит) - 0. Пытаюсь сменить скорость и ничего не получается, UART работает со старой. Может кто ткнет носом, куда посмотреть?..

 

у меня все работает. идет подбор скорости для GPS приемника. флаги не контролирую, но смена скорости происходит (GPS приходят как со скоростью 9600, так и 115200).

использую ATXMEGA А4U от 32 до 128

  __flash static unsigned int bscale[] =   {1666, 832, 416, 207, 103,  68,   51,   34,    16}; // for 16MHz
  USARTD1.CTRLA  = (unsigned char)USART_RXCINTLVL_MED_gc|USART_TXCINTLVL_LO_gc;
  USARTD1.CTRLB = USART_RXEN_bm | USART_TXEN_bm | USART_CLK2X_bm;
  USARTD1.CTRLC = 0x03;
  b = bscale[a];
  USARTD1.BAUDCTRLA = b&0xff;
  USARTD1.BAUDCTRLB = b>>8;

 

Share this post


Link to post
Share on other sites

Ну хоть у кого то работает) В вашем коде все понятно.. Вот нужно ли только каждый раз объявлять прерывания? Я использую библиотечные функции примерочного проекта по работе с UART, но там если покопаться те же регистры и те же команды, и есть функции по вычислению коэффициентов любой скорости. Сейчас пробовал играться с функцией инициализации, сначала ставил под одну скорость, следом с задержкой та же функция, но с другой.. По отдельности они работают, а последовательно не выполняется вторая. Как только проходит 1-ая запись данных в регистры скорости, происходит какая то блокировка и ничего уже поменять не могу. Есть подозрения на то, что к UART подцеплен полудуплексный RS-485, но как он может повлиять ума не приложу..

Share this post


Link to post
Share on other sites

Увидел все-таки одну бяку... Получается перестраивать небольшие скорости.... 390 000, 156 000... А вот 800 000 не получается... Хотя, если изначально задавать 800 000, то UART работает с ней... Подсчёт коэффициентов выполняет одна и та же функция.. Чудеса, да и только..

Share this post


Link to post
Share on other sites
Увидел все-таки одну бяку... Получается перестраивать небольшие скорости.... 390 000, 156 000... А вот 800 000 не получается... Хотя, если изначально задавать 800 000, то UART работает с ней... Подсчёт коэффициентов выполняет одна и та же функция.. Чудеса, да и только..

 

Переполнение переменной при арифметических операциях?

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now