Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

I2C В прекъсване при LPC11xx.
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=9432
Страница 1 от 1

Автор:  RM [ Съб Окт 15, 2011 8:40 pm ]
Заглавие:  I2C В прекъсване при LPC11xx.

Имам четене по I2C към един датчик. Трансфера е съвсем обикновен: -CPU праща адреса(7-bit)+бита за R/W, чака ACK от датчика, праща pointer byte ... чака ACK от датчика и приема 1 байта, праща ACK и приема втори байт. Прекъсването се случва при всяка промяна на състоянието на i2c шината, като се чете статус регистъра и се разпознават 31 състояния на i2c. Не мога да схвана ситуацията при която след поява на прекъсване по i2c се омазва трансфера. Случва се това че за четене на 2 8-битови регистъра на датчика, се получават поне 7-8 промени (прекъсвания) по i2c шината, и става само чрез сетъп на CB (callback,която се извиква след приключване на целия трансфер- след генериране на стоп нивото по i2c) функция, която я ползвам само за да разреша продължение на програмата (иначе става мазало). Да ама в същото време се случват прекъсвания на 16-bit таймера , SysTick , Uart-a ... и всичко е наред. Е пусна ли 3 реда код ( който не е в прекъсване) след функцията за четене по I2C без чакане на края на трансвера ... става тотално мазало. Дали причината е в това , че след първата промяна на статуса по i2c, програмата излиза от функцията по трансфер, и ако има код след нея продължава , докато не се случи следващо прекъсване, и компилатора не запазва в стека адресите на променливите, и вобще променливите дефинирани в тялото на функцията, и се осират нещата. Но от друга страна ако по време на трансфера по i2c се случат други прекъсвания, същия компилатор коректно си пази всичко ... :cry: Или ако не чакам четенето по i2c да завърши, не мога да продължа програмата, а същевремено, всички други прекъсвания, се изпълняват коректно без да омазват i2c шината.

Може ли да се случва това мазало заради променлива дефинирана в тялото на функцията, но тя да се пази единствено когато функцията се прекъсва от прекъсване на процесора.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/