|
|
  |
MSP430 - снова вопросы от чайника, Вопросы от чайника про MSP и магнитный компас |
|
|
|
Nov 27 2008, 21:40
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Daria @ Nov 27 2008, 22:19)  но может вместо одного можно как-то использовать BSL? Или это глупая версия? Нет, почему же. Вот в соседней ветке ссылка на пример реализации. Только не сам BSL (BSL-это программа внутри процессора), а программный UART (точно такой же, какой используется и в BSL).
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 28 2008, 00:16
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Daria @ Nov 28 2008, 01:19)  А вот такой вопрос - для еще одной версии недоделанного девайса, получается нужно три uart  Т.е. будет три адресата. таких кристаллов не нашла, но может вместо одного можно как-то использовать BSL? Или это глупая версия? многопроцессорный формат разбирать сейчас не очень хочется...  Если интерфейс внешний, то для не слишком высокой скорости приемопередачи возможно сделать программно-аппаратный на TimerA или чисто программный UART. Сергей Борщ, уже выше привел ссылку на тему где это обсуждается. В той теме я давал ссылки и на соответствующий application note и на его перевод. Если же интерфейс у вас чисто внутренний для связи внутри платы/устройства, то рассмотрите возможность применения синхронного интерфейса (SPI, например). Потому что в модуле USCI (который имплементирован в МК серии MSP430F2xxx) имеется возможность одновременного использования двух интерфейсов одного модуля: одного асинхронного (UART/IrDA) и одного синхронного (SPI/I2C) или двух синхронных (SPI/I2C). Аппаратная реализация интерфейса I2C что в модуле USART, что в USCI довольно заморочена, к тому же я сам его ни разу на деле не использовал (в смысле аппаратную поддержку I2C в MSP430, чисто программный I2C-master делал) поэтому из синхронных интерфейсов, имеющихся в MSP430, могу рекомендовать пока только SPI.
|
|
|
|
|
Nov 28 2008, 08:08
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(Daria @ Nov 27 2008, 22:19)  А вот такой вопрос - для еще одной версии недоделанного девайса, получается нужно три uart  Т.е. будет три адресата. таких кристаллов не нашла, но может вместо одного можно как-то использовать BSL? Или это глупая версия? многопроцессорный формат разбирать сейчас не очень хочется...  Возможно в тему http://tech.groups.yahoo.com/group/msp430/message/33745Цитата Re: MSP430F417 UARTYou can call the asynchronous serial Receive-a-Character and Transmit-a-Character subroutines in the BSL of a MSP430F417 under the following conditions: (a) You must set up and use P1.0 as the serial output. (  You must set up and use P1.1 as the serial input. © MCLK must be faster than 100*BAUD. For example, to use 9600b/s, you need to have MCLK>0.96MHz. (d) You need to set up the word at RAM 0x0202-0x0203 to [MCLK/BAUD]. For example, if MCLK=1MHz and BAUD=9600b/s, this word need to be 100 (0x0064). (e) You need to set up the word at RAM 0x0204-0x0205 to [(MCLK/BAUD)/2-30]. For example, if MCLK=1MHz and BAUD=9600b/s, this word need to be 20 (0x00). (f) You must set up TimerA to count in Continuous Mode. The counting rate should be the same as MCLK. (g) You can do either serial input or serial output. You cannot do both at the same time. (h) You cannot handle interrupts while doing either serial input or serial output. (i) You must use Even Parity. You have none, 1-byte or 2-byte block-checksum options. For the checksum options, do one of the followings: (1) If you do not want checksum, set R9 to 0x1000 or 0x1001 before you call the subroutines. The subroutines will change R9 from 0x1000 to 0x1001 and from 0x1001 to 0x1000. Thus subsequent calls do not need to set R9 again. (2) If you want a 1-byte XOR checksum, set R9 to 0 every time you call the subroutines. The subroutines will update a 1-byte checksum at 0x0212 and change R9 to 1. You need to initialize and read the checksum yourself. (3) If you want a 2-byte XOR checksum, set R9 to 0 when you initialize the checksum. The subroutines will update a 2-byte checksum at 0x0212-0x0213 and change R9 from 0 to 1 or from 1 to 0 to select which byte to update. You need to initialize and read the checksum yourself but you should not change R9. In addition to the above, to Receive-a-Character, you do the following: Код CLR R11 CALL #0x0F56 The character will be returned in R12. R11:BIT1 is an error flag. R5 is destroyed. RAM 0x0209 is destroyed. To Transmit-a-Character, you do the following instead: Код MOV.B [Character], R12 CALL #0x0EEA R11 is destroyed R5 is destroyed RAM 0x0207 is destroyed.
|
|
|
|
|
Nov 29 2008, 16:48
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(rezident @ Nov 28 2008, 03:16)  Если интерфейс внешний, то для не слишком высокой скорости приемопередачи возможно сделать программно-аппаратный на TimerA или чисто программный UART. Сергей Борщ, уже выше привел ссылку на тему где это обсуждается. В той теме я давал ссылки и на соответствующий application note и на его перевод. Если же интерфейс у вас чисто внутренний для связи внутри платы/устройства, то рассмотрите возможность применения синхронного интерфейса (SPI, например). Нет, интерфейс внешний. Смысл в чем - есть одна плата(управляющая), она принимает команды с компа, опрашивает компасный модуль и дальше посылает команду на поворотное устройство. Вот вся программа. Сначала поворотное устройство было "тупое", без внутреннего контроллера, управлялось оно просто импульсами тока заданной длительности - это не здорово. Теперь есть другое устройство, с собственным контроллером, ему достаточно просто отправить команду - и оно поедет, куда сказали  Итого три абонента - комп, компас и поворотник. Насчет "не слишком высокой скорости приемопередачи "...  вот не знаю. какую можно реализовать на TimerA? Хотя бы 19200 можно? Ваши ссылки скачала, спасибо, буду разбираться. В понедельник ждите вопросов - не думаю, что все получится с первого раза
Сообщение отредактировал Daria - Nov 29 2008, 16:50
|
|
|
|
|
Nov 29 2008, 19:10
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Daria @ Nov 29 2008, 21:48)  Нет, интерфейс внешний. Смысл в чем - есть одна плата(управляющая), она принимает команды с компа, опрашивает компасный модуль и дальше посылает команду на поворотное устройство. Вот вся программа. Сначала поворотное устройство было "тупое", без внутреннего контроллера, управлялось оно просто импульсами тока заданной длительности - это не здорово. Теперь есть другое устройство, с собственным контроллером, ему достаточно просто отправить команду - и оно поедет, куда сказали  Итого три абонента - комп, компас и поворотник. Как я понял у вас три различных устройства и все они независимо-автономные. Одно устройство (компас?) является т.с. "управляющим ретранслятором" и транслирует команды, переданные по технологическому каналу с PC на два других. Тип связи (асинхронный) уже определен и изменению не подлежит. Вам не хватает одного UART в вашем компасе для технологического канала. Я все правильно понял? Цитата(Daria @ Nov 29 2008, 21:48)  Насчет "не слишком высокой скорости приемопередачи "...  вот не знаю. какую можно реализовать на TimerA? Хотя бы 19200 можно? Когда-то я "баловался" с приемопередатчиком IrDA на TimerA по мотивам тех же самых апликух производителя. Скорость 38400 получил довольно легко даже на заморачиваясь написанием функций на ASM. Реализовывал на Си. Так что 19200 при вашей тактовой (8МГц) можно тоже реализовать без особых затруднений. Только следует учесть, что связь будет полудуплексной. Если для технологического канала вам это не подходит, то используйте обычный UART, а к программно-аппаратному UART подключите устройство, которое не так критично к полудуплексной связи.
|
|
|
|
|
Nov 29 2008, 21:56
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Сергей Борщ @ Nov 30 2008, 01:49)  С тактовым сигналом. И тактовый сигнал (SCLK) передается вместе с данными (SDAT) по каналу связи, а не восстанавливается из сигнала данных на приемной стороне. А можно всё же определение синхронного интерфейса? Я что-то не нагуглил ничего. В описании i2c от Филипс не сказано, что интерфейс синхронный. Там упоминается синхронизация, но лишь в контексте арбитража шины при мультимастере. Цитата(rezident @ Nov 30 2008, 01:59)  Очень на это похоже Сергей Борщ вполне понятно пояснил. Я въедливый:-) ЗЫ. Прошу прощения за офтопик.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|