|
|
  |
Работа с MSP430x2xx, про всё семейство и все модули |
|
|
|
Oct 15 2010, 13:56
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитирую юзергайд Цитата("User's Guide MSP430x2xx (Rev.E)") START and STOP conditions are generated by the master and are shown in Figure 17−3. A START condition is a high-to-low transition on the SDA line while SCL is high. A STOP condition is a low-to-high transition on the SDA line while SCL is high. The bus busy bit, UCBBUSY, is set after a START and cleared after a STOP. При работе с битовыми масками рекомендуется использовать операцию "побитового ИЛИ", а не сложение, чтобы избежать недоразумений при случайном наложении одной и той же маски. То бишь ваша проверка условия должны выглядеть как Код if (UCB0STAT & (UCBBUSY | UCSCLLOW))
|
|
|
|
|
Oct 15 2010, 17:40
|

Частый гость
 
Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713

|
Цитата(KARLSON @ Oct 15 2010, 21:29)  Рекомендацию я конечно же учту, но в чём разница результата операций "|" и "+"? "|" - это побитовое ИЛИ , а "+" - сложение
|
|
|
|
|
Oct 15 2010, 17:59
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(KARLSON @ Oct 15 2010, 23:29)  В понедельник проверю ещё раз и если всё в порядке приведу код. Советую все же ознакомиться с оригинальной спецификацией I2C и реализовать функцию Bus clear. Весьма пригодится  Цитата(KARLSON @ Oct 15 2010, 23:29)  Векторов что ли жалко было? Это сделано для совместимости с модулем USART, реализованным в более ранних сериях MSP430 (1xx, 4xx).
|
|
|
|
|
Oct 15 2010, 18:02
|

Знающий
   
Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819

|
Но результат то один и тот же! Цитата(rezident @ Oct 15 2010, 21:59)  Советую все же ознакомиться с оригинальной спецификацией I2C и реализовать функцию Bus clear. Весьма пригодится  restart при зависании шины заложена.
Сообщение отредактировал KARLSON - Oct 15 2010, 18:03
--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
|
|
|
|
|
Oct 15 2010, 18:04
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(KARLSON @ Oct 16 2010, 00:00)  Но результат то один и тот же! При ошибке результат будет разный. Например, в случае двойного включения маски Код #define BIT1 0x02 #define BIT2 0x04
mask &= (BIT1 | BIT2 | BIT1)); //реализуется в mask &= 0x06; mask &= (BIT1 + BIT2 + BIT1)); //реализуется в mask &= 0x08;
|
|
|
|
|
Nov 4 2010, 15:31
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116

|
Вопрос по внешним прерываниям для Port1(2). Все выводы порта на вход и на всех настроены прерывания. Если наступило событие по одному из выводов порта вызвавшее прерывание, то находясь в обработчике прерываний при наступлении события уже по другому выводу как поведет себя контроллер? То есть если P1_1 перешел из лог. 1 в лог. 0 и мы попали обработчик прерывания Port1 и в это время P1_2 перешел из лог.1 в лог. 0 то потеряется ли это событие и что сделать чтобы его не потерять? По сути такое может произойти на всех выводах порта. И ещё вопрос если во время одного типа прерывания выставляется флаг для другого, то прерывание потеряется или отработается по очереди? (подразумевается, что все регистры правильно настроены и прерывания разрешены) Если бы у меня была отладка то вопросы бы не задавал. Но в распоряжении только симулятор IAR
|
|
|
|
|
Nov 4 2010, 16:01
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитирую User's Guide: 8.2.6 P1 and P2 Interrupts -> Interrupt Flag Registers P1IFG, P2IFGЦитата Only transitions, not static levels, cause interrupts. If any PxIFGx flag becomes set during a Px interrupt service routine, or is set after the RETI instruction of a Px interrupt service routine is executed, the set PxIFGx flag generates another interrupt. This ensures that each transition is acknowledged. То бишь потери прерывания происходить не должно. Единственно, что это не гарантировалось во время непосредственной модификации регистров PxIFG. Этот баг под именем PORT3 описан где-то в errata для старых кристаллов. Вот нашел его описание в MSP430F13x/14x/14x1 Device Erratasheet - SLAZ017A.PDF. Цитата PORT3 Port3 - Bug description: Module: PORT1/2, Function: Port interrupts can get lost Port interrupts can get lost if they occur during CPU access of the P1IFG and P2IFG registers. Workaround: None
|
|
|
|
|
Nov 13 2010, 18:01
|
Знающий
   
Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073

|
Цитата(rezident @ Oct 15 2010, 20:59)  Советую все же ознакомиться с оригинальной спецификацией I2C и реализовать функцию Bus clear. Весьма пригодится  Это сделано для совместимости с модулем USART, реализованным в более ранних сериях MSP430 (1xx, 4xx). Огромное спасибо за ссылку, нашел в документе требования к подтягивающим резистрам с учетом емкости проводников ПП, а то изрядно в свое время повозился... Из-за плохих фронтов на линиях интерфейса.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|