× MSP430, Microcontrollori 16 bit Ultra Low Power

Bit masking

11 Anni 1 Mese fa #1 da elpablito
Bit masking è stato creato da elpablito
Questa volta sono in tilt il bit masking mi va stretto.
Quale è la semantica differenza tra le due istruzioni ?

TA0CTL = TASSEL_2 | MC_1;
TA0CTL = TASSEL_2 + MC_1;

Perchè il signore si permette di usare TACTL invece di TA0CTL ?
che così facendo mi manda in tilt.

Ringrazio
Paolo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
11 Anni 1 Mese fa #2 da StefA
Risposta da StefA al topic Bit masking
non ho mai "giocato" con gli MSP430..però se vuoi sapere qual'è la differenza tra OR e PIU'...

Quale è la semantica differenza tra le due istruzioni ?

TA0CTL = TASSEL_2 | MC_1;
TA0CTL = TASSEL_2 + MC_1;

01+01 = 10
01|01=01
facendo il più, si sommano i due valori, facendo l'or il bit risultate è...zero quando entrrambi sono zero e uno negli altri casi...

Se voglio mettere a 1 un bit di un certo registro, se sommassi 1..dovrei controllare prima che quel bit sia zero..altrimenti mi si modificherebbero gli altri bit, invece con l'or se è già a 1..rimane a 1.
Oppure ad esempio copio un valore di 4 bit in un registro da 8bit, e voglio porre gli altri 4bit a 1..per utilizzare il +, dovrei conoscere ogni singolo bit, se invece faccio OR 11110000, i 4 bit a sinistra risulteranno a 1 indipendentemente dai valori precedenti.

Perchè il signore si permette di usare TACTL invece di TA0CTL ?
che così facendo mi manda in tilt.

questa non l'ho capita..ma forse perché non conosco gli MSP430...

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
11 Anni 1 Mese fa #3 da elpablito
Risposta da elpablito al topic Bit masking
Rispondo in parte io visto che sono in trasferta e giocando con un LaunchPad
Partiamo dalla risposta che conosco:
TACTL invece di TA0CTL
Perchè nell'Header file del G2553 sono definiti dei nomi alternativi per i registri del timerA
(forse perchè nel manualedella famiglia viene nominato come TACTL) è quindi indifferente
usare l'uno o l'altro

Che differenza faccia tra + o OR è nota però il Mauro usa
P1OUT = BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
certamente non per incrementare di uno per volta il registro
le due istruzioni citate (tratte da uno degli esempi di TI) hanno lo stesso effetto
sul registro TA0CTL (ho fatto il debug e verificato i valori del registro) di qui la domanda.
Sarebbe quindi equvalente scrivere
P1OUT = BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6 | BIT7;
perchè se è così ,abbisogno di uno spiegone.
Grazie e salutoni
Paolo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
11 Anni 1 Mese fa #4 da elpablito
Risposta da elpablito al topic Bit masking
Evidentemente sono andato a verificare

P1OUT = BIT0 + BIT1 + BIT2 + BIT3; // 0000 1111
P1OUT = BIT4 | BIT5 | BIT6 | BIT7; // 1111 0000
P1OUT = BIT2 + BIT3; // 0000 1100
P1OUT |= BIT0 + BIT1; // 0000 1111
P1OUT = BIT2 + BIT3; // 0000 1100
P1OUT |= BIT0 | BIT1; // 0000 1111

I valori del commento sono quelli di P1OUT durante il DEBUG.
Un commento
Grazie
Paolo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
11 Anni 1 Mese fa #5 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Bit masking
Ciao,
alcune volte nomi diversi per lo stesso registro discendono da sole ragioni di compatibilità con versioni precedenti di Code Composer Studio o IAR.
In questo modo vecchi programmi o programmi scritti in ambiente IAR possono "girare" anche su Code Composer Studio.

Relativamente alla domanda

P1DIR = BIT1 + BIT2

e

P1DIR = BIT1 | BIT2;

il risultato e' lo stesso.
...ma c'e' una differenza da tenere a mente.

considerando che BIT1 vale 0000 0001 mentre BIT2 vale 0000 0010 facendo la somma si ottiene 0000 0011 mentre facendo l'OR si ha ancora 0000 0011.
Se pero' si dovesse fare un errore del tipo:

P1DIR = BIT1 + BIT1 + BIT2;

e

P1DIR = BIT1 | BIT1 | BIT2;

nel primo caso si ha 0000 0100 mentre nel secondo si ha ancora 0000 0011.
In entrambi i casi si hanno dei comportamenti anomali ma nel caso si includa due volte un bit (per esempio in un registro), facendo uso dell'OR si potrebbe essere immuni da una distrazione.

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login