Programmazione in C

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

Programmazione in C

Postby rob » 22 Jun 2015, 14:15

Salve a tutti,
ho iniziato la tesi per la magistrale di ingegneria elettronica ma non ho una profonda conoscenza del C.
Vi volevo chiedere:
1)Cosa cambia tra: SPI_MCR_HALT_MASK 0x1u e SPI_MCR_HALT_SHIFT 0;
2)per scrivere un singolo bit si impiega la funzione BITBAND_REG ma per scrivere più bit...
rob
 
Posts: 7
Joined: 22 Jun 2015, 13:51

Re: Programmazione in C

Postby deluca » 22 Jun 2015, 14:49

Ciao rob,
chi sei, che fai, che micro stai usando, che compilatore...... ecc ecc.....?
sei su freescale?


Ti consiglio di presentarti nella sezione dedicata.
Inoltre, spiegati meglio e se potremo, ci aiuterai ad aiutarti :)
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Programmazione in C

Postby rob » 22 Jun 2015, 16:16

Slave e grazie per la risposta,
mi chiamo Roberto, come vi dicevo sto concludento il percorso di studi in Ing. Provengoo dalla triennale di telecomunicazioni e anche nella specialistica ho scelto esami orientati alle telecomunicazioni come microonde, maxwell, antenne, segnali, ottica, ecc (tutta teoria).. Ma queste conoscenze non sono utili nel mondo del lavoro e quindi per concludere l'Univ. mi sono buttato su un progetto pratico di elettronica. Ho fatto un solo esame in C++ alla triennale.

Per iniziare devo interfacciare un micro l'MK10DN512ZVLL10 freescale con l'accellerometro LSM330DL tramite Kinetis Design Studio IDE.

Per settare un singolo bit uso la seguente istruzione e non ho problemi:
BITBAND_REG(PTE->PDDR, 18) = 1;
Però non riesco a settare più bit....ho scritto l'istruzione seguente e non funziona.
SPI0->SPI_MCR_DCONF_MASK=0b00u;
Quindi per iniziare vi volevo chiedere come faccio a scrivere più bit (relativa ad una certa maschera) in un registro del micro.
Poi ho molti altri dubbi...
rob
 
Posts: 7
Joined: 22 Jun 2015, 13:51

Re: Programmazione in C

Postby Leonardo » 22 Jun 2015, 16:57

Ciao Roberto,

Cosa combini con un accelerometro e un ARM Cortex M4?

Ti consiglio di prendere confidenza con le operazioni a livello di bit ed il protocollo SPI prima di buttarti sul progetto.
Parti dalle cose più semplici, hai già preso confidenza coi GPIO (pin di I/O)?

Leonardo
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Programmazione in C

Postby rob » 22 Jun 2015, 18:14

Ciao Leonardo,
per il momento non ci combino niente.....ho letto l'SPI di entrambi e sono partito per fare il programmino.
Solo che mi segnala un casino di errori quando setto più bit contemporaneamente. Penso che l'istruzione che uso sia sbagliata. Dopo, dovrò revedere la logica di tutto ma adesso mi interessava partire con questo.
Ho scritto l'istruzione seguente e non funziona.
SPI0->SPI_MCR_DCONF_MASK=0b00u.............
rob
 
Posts: 7
Joined: 22 Jun 2015, 13:51

Re: Programmazione in C

Postby Leonardo » 22 Jun 2015, 19:21

Parti con troppa fretta, non è così semplice programmare i microcontrollori, sopratutto la prima volta.

Ad ogni modo prova a chiederti (e riporta la risposta sul forum):
- Cosa ti aspetti che faccia tale istruzione?
- SPI0 cos'è? la porta SPI numero 0 è configurata?
- SPI_MCR_DCONF_MASK cos'è? Perché gli assegni il valore zero?
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Programmazione in C

Postby rob » 22 Jun 2015, 20:12

Ok, provo a spiegarti:
L'SPI (Serial Peripheral Interface) è il modulo che permette di configurare il bus per la comunicazione tra MCU e le periferiche. Questo modulo è composto da 56 registri di 32 bit. Per configurare l'SPI vado a settare i vari registri sulla base del datasheet di entrambi (il micro e la periferica in questo caso l'accelerometro lsm330dl). L'MCR è uno dei 56 registri disponibili.
Su vuoi questo è il link del datasheet del micro:
http://cache.freescale.com/files/32bit/ ... F2V2RM.pdf
L'MCR di cui sto parlando è a pag. 1140. Alla fine della pag. c'è una fig. che mostra i 32 bit da settare. Il campo DCONF è composto dai bit 28-29 e settandoli a 00 configuro il DSPI come SPI....ma come posso a scrive li?

Mi rendo conto che partire con un micro di questo tipo da 0 è un salto nel vuoto però è l'ultima occasione che ho per imparare....
rob
 
Posts: 7
Joined: 22 Jun 2015, 13:51

Re: Programmazione in C

Postby Leonardo » 22 Jun 2015, 21:21

Ok, al momento hai un'idea di cosa sia SPI, con solo questo però andrai poco lontano..
Hai una vaga idea delle risposte alle domande di prima?

I registri generalmente sono visti semplicemente come "variabili" grazie a delle definizioni dell'ambiente di sviluppo o librerie fornite dal produttore del micro.

Facciamo un esempio: per impostare il valore 1 nel registro pippo generalmente basterà scrivere
Code: Select all
pippo = 1;


Mentre per leggerlo
Code: Select all
mia_variabile = pippo;


dove pippo è da qualche parte definito (es. in qualche libreria che richiami) come un l'indirizzo di memoria del registro (supponiamo ad 8 bit con locazione 0x123) con qualcosa di simile a

Code: Select all
#define PIPPO ((uint8_t) 0x123)


Questa naturalmente è una semplificazione, in realtà la definizione è più complicata, ma è tanto per rendere l'idea.

Ora veniamo alla tua domanda, senza utilizzare macro strane, se hai una variabile chiamata SPI0_MCR a 32 bit, es. di tipo uint32_t, come puoi fare a "pulire" i bit 28-29?

Code: Select all
SPI0_MCR = SPI0_MCR & 0xCFFFFFFF;


Tips: 0xCFFFFFFF in binario vale 1100 1111 1111 1111 1111 1111 1111 1111, prova a capire perché funziona.

Senza bruciare le tappe dovrai imparare a manipolare i bit vecchio stile prima di usare macro o funzioni black-box, prova a partire da qui: https://en.wikipedia.org/wiki/Bit_manipulation
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Programmazione in C

Postby rob » 22 Jun 2015, 22:46

Ok ok, faccio un AND e mi mette a 0 dove ho gli 0 cioè al 28 e 29...penso sia così...comunque prima dovrei inizializzare il registro mettendoci tutti 1 e poi fare le modifiche...adesso vedo
rob
 
Posts: 7
Joined: 22 Jun 2015, 13:51

Re: Programmazione in C

Postby Leonardo » 23 Jun 2015, 01:27

Hai già visto il "Processor Expert" per configurare il modulo SPI?
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Programmazione in C

Postby rob » 23 Jun 2015, 17:13

no......
comunque ho messo:
Code: Select all
MCR = MCR & 0xCFFFFFF;

costruendo mi scrive:
[Multiple markers at this line
- each undeclared identifier is reported only once for each function it appears in
- 'MCR' undeclared (first use in this function)]
Ho pensato di inizializzare tutto il registro a 1 scrivendo e poi il setto i bit 28 e 29:
Code: Select all
MCR=0xFFFFFFFF;

Code: Select all
MCR = MCR & 0xCFFFFFF;

mi da sempre l'errore ma solo sulla prima riga....
[Multiple markers at this line
- 'MCR' undeclared (first use in this function)
- each undeclared identifier is reported only once for each function it appears in]
è come se non vedesse l'MCR...il file .h del MK10 è incluso...
Attachments
Immagine.png
Immagine.png (71.31 KiB) Viewed 6385 times
rob
 
Posts: 7
Joined: 22 Jun 2015, 13:51

Re: Programmazione in C

Postby Leonardo » 23 Jun 2015, 20:05

Ciao Roberto,

Sono sicuro che se avessimo domande sulla fisica delle antenne ci sapresti dimostrare formule chilometriche senza battere ciglio ma...

Ti consiglio caldamente di cercare un tutor o una persona interna al dipartimento che ti possa seguire nell'apprendere le basi della programmazione dei microcontrollori e che ti chiarisca prontamente anche i dubbi legati alla programmazione C, vedo come poco produttivo per te il forum in questa fase, per la natura asincrona del forum.

Non esiste nessun registro che si chiama solamente MCR ed il compilatore ti notifica infatti che l'identificatore non è dichiarato.
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Programmazione in C

Postby rob » 23 Jun 2015, 20:20

ok, hai ragione, per concludere mi puoi consigliare libri/manuali...
rob
 
Posts: 7
Joined: 22 Jun 2015, 13:51

Re: Programmazione in C

Postby Leonardo » 23 Jun 2015, 20:24

Sui Freescale non ne conosco, un libro non sostituisce comunque un tutor preparato, ce ne vorrebbero a dozzine.
Se hai delle risorse umane all'interno dell'università, ti consiglio di sfruttarle.
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma


Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 1 guest

cron