| Микроконтролери и електроника 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 се случат други прекъсвания, същия компилатор коректно си пази всичко ... Може ли да се случва това мазало заради променлива дефинирана в тялото на функцията, но тя да се пази единствено когато функцията се прекъсва от прекъсване на процесора. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|