Mi serve usare un 74hc595 per pilotare 8 uscire pwm quando necessario.
Non chiedetemi che fine hanno fatto le uscite pwm del mio Atmga328 perché dovrei anticipare l'esame di stato qui per voi =( .
Appunto perché ho progettato ( non so se già esiste , non mi sono informato , probabilmente si ) un modo per ottenere più uscite sia in ingresso che in uscita con dei 74hc595 e HCF4067 utilizzando il protocollo ISP e penso di intuire che con l'ausilio dell'assembly velocizzando il tutto sarà possibile rendere ancora più efficace e veloce la mia libreria.
Tornando al problema :
Sapete spiegarmi in linea di massima cosa fanno quelle istruzioni? Grazie
asm volatile ("cp %0, %1" : /* No outputs */ : "r" (counter), "r" (pwmval): );
si , ho letto , e in grandi linee sono riuscito a capire cosa fa questa "macro" ... mette a confronto pwmval e counter... ma il risultato dove finisce? Inoltre ... cosa sta a significare "r" ? Non ho trovato nulla a riguardo..
asm volatile ("ror %0" : "+r" (sendbyte) : "r" (sendbyte) : );
Lo stesso qui , che fine fa il risultato? dove viene salvato? quel "+r" non riesco proprio a capirlo..
so che mi servirebbero ore e ore di studio assembly , ma a me interesserebbe solo la funzione di questa macro , tutto qui..
Al primo link, operand r dovrebbe essere indicazione di usare un registro interno della MCU, "+r" read/write su registro
= Write-only operand, usually used for all output operands.
+ Read-write operand
& Register should be used for output only
"cp %0, %1" : /* No outputs */ : "r" (counter), "r" (pwmval): );
Istruzione cp fa un confronto ed in base a tale confronto setta il carry bit C (mi pare)
la ror fa rotazione (shift) ma usa anche il carry bit, credo che se la cp ha settato il carry, quel bit a 0 o 1 a seconda del confronto ti viene poi shiftato dentro a sendbyte al bit numero 7 e nel carry ci porta il bit 0 di sendbyte.
I percento dovrebbero essere posizionali, il primo %0 prende il primo parametro (counter) %1 il secondo.
Un pò come i % nella printf() del C
P.S. non conosco l'argomento, ho letto i link. Non sono sicuro di quello che affermo.
Per le istruzioni assembly del 328 meglio leggere questo:
Alla fine di tutto, la SoftPWM serve per generare un segnale PWM via software. Per essere più veloce possibile viene usato direttamente l'assembly inline.
Normalmente l'utente medio non deve arrivare a tanto. Com'è che a fine maggio ti sei messo ad armeggiare con l'assembly?