Пн мар 20, 2017 20:45:08
Вт мар 21, 2017 07:08:48
Вт мар 21, 2017 12:23:05
JackSmith писал(а):Мне не удалось завести в Proteus UART на MSP430x2xx, пришлось использовать софтовый.
Вт мар 21, 2017 14:05:58
ice126 писал(а):Я уже тоже решил плюнуть на это дело и в железе отладку делать.
У меня вообще проект на G2553, но его нет в Proteus.
Вт мар 21, 2017 14:45:57
JackSmith писал(а):ice126 писал(а):Я уже тоже решил плюнуть на это дело и в железе отладку делать.
Аналогично, АЦП я там тоже не поднял, вне зависимости от того, что кидаешь на него: землю или шину питания - всегда выдает 1023, хотя та же программа на железке вполне нормально работает. Про то что I2C там рабочий для меня новость, я даже пытаться не стал его поднять, сразу поставил совтовый, потом попробую аппаратный завести.У меня вообще проект на G2553, но его нет в Proteus.
В Proteus 8.5 он уже есть.
Вт мар 21, 2017 15:04:30
Вт мар 21, 2017 17:35:43
Ser60 писал(а):Верно-ли я понимаю, что проблема только как работать с UART в Протеусе, а в железе все работает? Протеус я не использую, но если есть проблемы с функционированием модулей MSP430 в железе, мог-бы помочь.
JackSmith писал(а):У меня вообще проект на G2553, но его нет в Proteus.
В Proteus 8.5 он уже есть.
Вт мар 21, 2017 19:09:04
#include "io430.h"
#define RX P1 // UART pins on P1
#define TX P2
void Clock_config(); // function prototypes
void Ports_config();
void UART_config();
int main()
{
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
Clock_config(); // set 8 MHz MSCK, 2 MHz SMCLK
Ports_config(); // set up ports for GPIO
UART_config(); // configure USCI A0 module for UART
__enable_interrupt(); // enable interrupts globally
__low_power_mode_0(); // wait for char receive
while(1)
{
__no_operation();
}
}
void Clock_config() // configure basic clock module
{
DCOCTL = CALDCO_1MHZ; // set 1 MHz MCLK
BCSCTL1 = CALBC1_1MHZ;
BCSCTL2 = 0; // SMCLK=MCLK
BCSCTL3 = LFXT1S1; // select VLO as ACLK
}
void Ports_config()
{
P1SEL = RX + TX; // assign P1.1 and P1.2 to UCA0
P1SEL2 = RX + TX;
}
void UART_config()
{
UCA0CTL1 = UCSSEL1 + UCSWRST; // SMCLK, keep module in RESET
UCA0BR1 = 0;
UCA0BR0 = 104; // set 9600 8N1 mode
UCA0MCTL = UCBRS1; // fractional part of freq. divider
UCA0CTL1 &= ~UCSWRST; // enable operation
IE2 = UCA0RXIE; // enable RX interrupt
}
#pragma vector=USCIAB0RX_VECTOR // USI UART handler
__interrupt void USCI_ISR(void)
{
char c = UCA0RXBUF; // get received character
if (('A' <= c && c <= 'Z') ||
('a' <= c <= 'z'))
c ^= 32; // flip case of letters
while(!IFG2 & UCA0TXIFG){} // wait for TX ready
UCA0TXBUF = c; // transmit character
}
Вт мар 21, 2017 19:52:05
Вт мар 21, 2017 20:25:58
Ср мар 22, 2017 00:24:57
ice126 писал(а):К стати, G2553 тоже дает выбрать на стадии создания проекта, но компонента такого нет.
Жаль.
Ser60 писал(а):Верно-ли я понимаю, что проблема только как работать с UART в Протеусе, а в железе все работает? Протеус я не использую, но если есть проблемы с функционированием модулей MSP430 в железе, мог-бы помочь.
DCOCTL=CALDCO_1MHZ;
BCSCTL1=CALBC1_1MHZ;
Ср мар 22, 2017 01:05:42
Ср мар 22, 2017 07:44:15
Ser60 писал(а):Не можете в Протеусе или в железе - с этого следует начинать вопрос. Если первое, то я бессилен. Строчки кода для установки частоты DCO правильные. Посмотрите отладчиком содержимое этих регистров (DCOCTL и BCSCTL1) и посчитайте какая должна быть частота. Или просто выведите SMCLK на P1.4 и измерьте. В общем, мало информации. Может у Вас в коде светодиод управляется таймером тактируемым от ACLK, или частотой независимой от DCO.
#include <msp430g2453.h>
#include <sys/types.h>
#define LED BIT0
int main (void)
{
WDTCTL=WDTPW | WDTHOLD; //turn off watchdog
P1DIR = LED;
P1OUT &=~LED;
// setup DCO
DCOCTL=CALDCO_1MHZ;
BCSCTL1=CALBC1_1MHZ;
int i=0;
while (1)
{
for(i=0;i<20;i++)
__delay_cycles(0xFFFF);
P1OUT ^= LED;
}
return 0;
}
DCOCTL=CALDCO_1MHZ;
BCSCTL1=CALBC1_1MHZ;
0000e03e <main>:
e03e: b2 40 80 5a mov #23168, &0x0120 ;#0x5a80
e042: 20 01
e044: d2 43 22 00 mov.b #1, &0x0022 ;r3 As==01
e048: f2 f0 fe ff and.b #-2, &0x0021 ;#0xfffe
e04c: 21 00
e04e: d2 42 f8 10 mov.b &0x10f8,&0x0056
e052: 56 00
e054: d2 42 f9 10 mov.b &0x10f9,&0x0057
e058: 57 00
e05a: 0e 43 clr r14
e05c: 06 3c jmp $+14 ;abs 0xe06a
e05e: 3f 40 54 55 mov #21844, r15 ;#0x5554
e062: 1f 83 dec r15
e064: fe 23 jnz $-2 ;abs 0xe062
e066: 03 43 nop
e068: 1e 53 inc r14
e06a: 3e 90 14 00 cmp #20, r14 ;#0x0014
e06e: f7 3b jl $-16 ;abs 0xe05e
e070: d2 e3 21 00 xor.b #1, &0x0021 ;r3 As==01
e074: 0e 43 clr r14
e076: f3 3f jmp $-24 ;abs 0xe05e
0000e078 <__stop_progExec__>:
e078: 32 d0 f0 00 bis #240, r2 ;#0x00f0
e07c: fd 3f jmp $-4 ;abs 0xe078
0000e03e <main>:
e03e: b2 40 80 5a mov #23168, &0x0120 ;#0x5a80
e042: 20 01
e044: d2 43 22 00 mov.b #1, &0x0022 ;r3 As==01
e048: f2 f0 fe ff and.b #-2, &0x0021 ;#0xfffe
e04c: 21 00
e04e: d2 42 fe 10 mov.b &0x10fe,&0x0056
e052: 56 00
e054: d2 42 ff 10 mov.b &0x10ff,&0x0057
e058: 57 00
e05a: 0e 43 clr r14
e05c: 06 3c jmp $+14 ;abs 0xe06a
e05e: 3f 40 54 55 mov #21844, r15 ;#0x5554
e062: 1f 83 dec r15
e064: fe 23 jnz $-2 ;abs 0xe062
e066: 03 43 nop
e068: 1e 53 inc r14
e06a: 3e 90 14 00 cmp #20, r14 ;#0x0014
e06e: f7 3b jl $-16 ;abs 0xe05e
e070: d2 e3 21 00 xor.b #1, &0x0021 ;r3 As==01
e074: 0e 43 clr r14
e076: f3 3f jmp $-24 ;abs 0xe05e
0000e078 <__stop_progExec__>:
e078: 32 d0 f0 00 bis #240, r2 ;#0x00f0
e07c: fd 3f jmp $-4 ;abs 0xe078
Ср мар 22, 2017 14:19:25
Ser60 писал(а):Не понял какие доп. библиотеки искали. Для Протеуса что-ли? Мой Вам совет - забудьте о нём. Зачем Вам нужен инструмент, в котором баг на баге сидит, и который, к тому-же, не гарантирует, что после него будет работать в железе. Я код, выложенный выше только чтo лично проверит с G2553 и USB-UART конвертером на CP2104 и терминальной программой от Parallax и работоспособность его гарантирую.
Ср мар 22, 2017 16:01:52
Ср мар 22, 2017 17:55:25
Ser60 писал(а):ice126 - какая у Вас платка за $4? Такая? Раньше она действительно $4 стоила, сейчас около $10.
Коты - купите себе хотя-бы такую по ссылке выше. На ней и программатор и внутрисхемный отладчик имеется. Без него будете тыркаться с МК как слепые котята. Начнёте пользоваться - сами поймёте, что никакой Протеус и не нужен будет.
Ср мар 22, 2017 18:05:01
Ср мар 22, 2017 18:46:50
Ser60 писал(а):JackSmith - всё правильно у Вас в коде. Сдаётся мне, что Вы затерли калибровочные константы в памяти МК. Они хоть и дефолтно защишены от записи после ресета, но ... всё бывает. Попробуйте згрузить непосредственно их значения для моего экземпляра 2553. Точных частот у себя вряд-ли получите, но разницу между 1 и 16 мгц ощутите:
CALDCO_16MHZ = 0x90
CALBC1_16MHZ = 0x8F
CALDCO_12MHZ = 0x9A
CALBC1_12MHZ = 0x8E
CALDCO_8MHZ = 0x8C
CALBC1_8MHZ = 0x8D
CALDCO_1MHZ = 0xCD
CALBC1_1MHZ = 0x86
Ср мар 29, 2017 19:11:55