Перейти к содержанию
    

MSP430 - снова вопросы от чайника

но может вместо одного можно как-то использовать BSL? Или это глупая версия?
Нет, почему же. Вот в соседней ветке ссылка на пример реализации. Только не сам BSL (BSL-это программа внутри процессора), а программный UART (точно такой же, какой используется и в BSL).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот такой вопрос - для еще одной версии недоделанного девайса, получается нужно три uart :05: Т.е. будет три адресата. таких кристаллов не нашла, но может вместо одного можно как-то использовать BSL? Или это глупая версия? многопроцессорный формат разбирать сейчас не очень хочется... :05:
Если интерфейс внешний, то для не слишком высокой скорости приемопередачи возможно сделать программно-аппаратный на TimerA или чисто программный UART. Сергей Борщ, уже выше привел ссылку на тему где это обсуждается. В той теме я давал ссылки и на соответствующий application note и на его перевод.

Если же интерфейс у вас чисто внутренний для связи внутри платы/устройства, то рассмотрите возможность применения синхронного интерфейса (SPI, например). Потому что в модуле USCI (который имплементирован в МК серии MSP430F2xxx) имеется возможность одновременного использования двух интерфейсов одного модуля: одного асинхронного (UART/IrDA) и одного синхронного (SPI/I2C) или двух синхронных (SPI/I2C). Аппаратная реализация интерфейса I2C что в модуле USART, что в USCI довольно заморочена, к тому же я сам его ни разу на деле не использовал (в смысле аппаратную поддержку I2C в MSP430, чисто программный I2C-master делал) поэтому из синхронных интерфейсов, имеющихся в MSP430, могу рекомендовать пока только SPI. :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в MSP430F2617 четыре уарта на борту, можно его попробовать. Причем распиновка у 64-пинового корпуса такая же как в F149 или F169

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в MSP430F2617 четыре уарта на борту, можно его попробовать. Причем распиновка у 64-пинового корпуса такая же как в F149 или F169
Вы ошибаетесь. В даташите конечно написано, что там четыре USCI модуля, но именно как UART (Universal Asynchronous Receiver / Transmitter) можно использовать только два, как я и описал в своем предыдущем сообщении. И вообще деление на четыре модуля весьма условное. Я бы классифицировал их скорее как два модуля, каждый из которых содержит один USCI и один USI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот такой вопрос - для еще одной версии недоделанного девайса, получается нужно три uart :05: Т.е. будет три адресата. таких кристаллов не нашла, но может вместо одного можно как-то использовать BSL? Или это глупая версия? многопроцессорный формат разбирать сейчас не очень хочется... :05:

 

Возможно в тему

http://tech.groups.yahoo.com/group/msp430/message/33745

Re: MSP430F417 UART

 

You 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.

(B) 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потому что в модуле USCI (который имплементирован в МК серии MSP430F2xxx) имеется возможность одновременного использования двух интерфейсов одного модуля: одного асинхронного (UART/IrDA) и одного синхронного (SPI/I2C) или двух синхронных (SPI/I2C).

Позанудствую:) i2c - не синхронный:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Позанудствую:) i2c - не синхронный:)
Оба-на! Вносите определение синхронного интерфейса и вместе посмотрим, где I2C этому определению не соответствует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если интерфейс внешний, то для не слишком высокой скорости приемопередачи возможно сделать программно-аппаратный на TimerA или чисто программный UART. Сергей Борщ, уже выше привел ссылку на тему где это обсуждается. В той теме я давал ссылки и на соответствующий application note и на его перевод.

Если же интерфейс у вас чисто внутренний для связи внутри платы/устройства, то рассмотрите возможность применения синхронного интерфейса (SPI, например).

Нет, интерфейс внешний. Смысл в чем - есть одна плата(управляющая), она принимает команды с компа, опрашивает компасный модуль и дальше посылает команду на поворотное устройство. Вот вся программа. Сначала поворотное устройство было "тупое", без внутреннего контроллера, управлялось оно просто импульсами тока заданной длительности - это не здорово. Теперь есть другое устройство, с собственным контроллером, ему достаточно просто отправить команду - и оно поедет, куда сказали :) Итого три абонента - комп, компас и поворотник.

Насчет "не слишком высокой скорости приемопередачи "... :05: вот не знаю. какую можно реализовать на TimerA? Хотя бы 19200 можно?

Ваши ссылки скачала, спасибо, буду разбираться. В понедельник ждите вопросов - не думаю, что все получится с первого раза :biggrin:

Изменено пользователем Daria

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, интерфейс внешний. Смысл в чем - есть одна плата(управляющая), она принимает команды с компа, опрашивает компасный модуль и дальше посылает команду на поворотное устройство. Вот вся программа. Сначала поворотное устройство было "тупое", без внутреннего контроллера, управлялось оно просто импульсами тока заданной длительности - это не здорово. Теперь есть другое устройство, с собственным контроллером, ему достаточно просто отправить команду - и оно поедет, куда сказали :) Итого три абонента - комп, компас и поворотник.
Как я понял у вас три различных устройства и все они независимо-автономные. Одно устройство (компас?) является т.с. "управляющим ретранслятором" и транслирует команды, переданные по технологическому каналу с PC на два других. Тип связи (асинхронный) уже определен и изменению не подлежит. Вам не хватает одного UART в вашем компасе для технологического канала. Я все правильно понял?

Насчет "не слишком высокой скорости приемопередачи "... :05: вот не знаю. какую можно реализовать на TimerA? Хотя бы 19200 можно?
Когда-то я "баловался" с приемопередатчиком IrDA на TimerA по мотивам тех же самых апликух производителя. Скорость 38400 получил довольно легко даже на заморачиваясь написанием функций на ASM. Реализовывал на Си. Так что 19200 при вашей тактовой (8МГц) можно тоже реализовать без особых затруднений. Только следует учесть, что связь будет полудуплексной. Если для технологического канала вам это не подходит, то используйте обычный UART, а к программно-аппаратному UART подключите устройство, которое не так критично к полудуплексной связи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оба-на! Вносите определение синхронного интерфейса и вместе посмотрим, где I2C этому определению не соответствует.

 

У меня нет определения, есть лишь какое-то смутное чувство, что он не синхронный:) Из-за задержек наверное... Хотя это можно рассматривать как синхронизацию с принимающей стороной... Может я и не подумамши ляпнул:)

А что такое синхронный в вашем понимании? С чем синхронный?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что такое синхронный в вашем понимании? С чем синхронный?
С тактовым сигналом. Это когда тактовый сигнал (SCLK) передается вместе с данными (SDAT) по каналу связи, а не восстанавливается из сигнала данных на приемной стороне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может я и не подумамши ляпнул:)
Очень на это похоже :biggrin:

Сергей Борщ вполне понятно пояснил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С тактовым сигналом. И тактовый сигнал (SCLK) передается вместе с данными (SDAT) по каналу связи, а не восстанавливается из сигнала данных на приемной стороне.

 

А можно всё же определение синхронного интерфейса? Я что-то не нагуглил ничего. В описании i2c от Филипс не сказано, что интерфейс синхронный. Там упоминается синхронизация, но лишь в контексте арбитража шины при мультимастере.

 

Очень на это похоже :biggrin:

Сергей Борщ вполне понятно пояснил.

 

Я въедливый:-)

 

ЗЫ. Прошу прощения за офтопик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Синхронный интерфейс это интерфейс в котором наряду с сигналом(ами) данных передается сигнал тактовой синхронизации. Если к обычным сигналам UART (RX и TX) добавить тактовый сигнал UCLK, то интерфейс тоже станет синхронным. Модуль в MSP430 не зря называется USART (Universal Synchronous/Asynchronous Receive/Transmit), т.к. у него имеется вход внешнего тактирования, который может использоваться для синхронизации как в режиме UART, так и в режиме SPI (slave).

Кстати, двухпроводный синхронный интерфейс SSI с дифф. интерфейсом физической линии RS485/RS422 широко применяется в промышленных энкодерах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...