Spero che il mio titolo abbia una terminologia corretta. Sto lavorando (imparando) con la scheda di scoperta STM32F4, che ha un microcontrollore STM32F407VGTx su di essa. Cerco davvero di trovare le risposte nel manuale di riferimento, ma a volte è davvero difficile trovare anche dove cercare. Forse a causa del fatto che è lungo più di 1700 pagine ...
Quindi, ecco la situazione, durante i miei test (codice C, il compilatore è arm-none-eabi-size), mi sono reso conto che posso scrivere qualsiasi valore nei registri periferici, ad esempio nei registri GPIOD. Ma usando lo stesso codice (per scrivere su un indirizzo), non sono in grado di scrivere, ad esempio, all'indirizzo 0x58 (0x00000058 in effetti). In caso di registri periferici, il documento indica chiaramente quali registri / bit sono abilitati alla scrittura e quali di sola lettura con annotazioni come "r", "rw". Tuttavia, per l'indirizzo 0x58, non sono riuscito a trovare il motivo per cui non posso scriverci.
Qualsiasi guida o spiegazione sarebbe apprezzata, grazie.
aggiornamento:
Contro domanda: perché dovresti essere in grado di scrivere a quell'indirizzo? Qualcosa è mappato a quello? - Marcus Müller
OK, è un po 'interessante. Ho appena iniziato a conoscere gli interrupt esterni e voglio fare tutto (compresi quindi gli interrupt esterni) a livello di registro, durante il mio apprendimento. Quindi, ecco perché non ho utilizzato alcuna funzione da HAL, SPL o CMSIS e nessuno di questi file è presente nella directory del progetto. In un certo senso ci sono riuscito, quindi avevo il registro in sospeso EXTI che si avviava correttamente, ma non sono riuscito a trovare un modo per collegare una funzione di callback all'interrupt che definirà il processo che voglio eseguire in caso di interrupt. Ispezionando la tabella NVIC (pagina 372) dal manuale di riferimento, è emerso che ogni interrupt è correlato a un indirizzo di memoria nell'ultima colonna. Quindi, ho pensato, forse, solo un'idea, quelle posizioni conterranno l'indirizzo di memoria (puntatore) alle funzioni del gestore di interrupt. Quindi, ho quindi pensato di definire una funzione e quindi scrivere l'indirizzo di quella funzione nella posizione di memoria 0x58. In modo che, quando arriva l'interruzione, il microcontrollore guarderà 0x58, che lo reindirizzerà alla posizione della funzione di interesse.
Sì, questo aggiornamento avrebbe potuto essere di per sé un'altra domanda. Dispiace per la confusione. Penso che si possa rispondere alla domanda senza questa storia, ma un commento mi ha fatto aggiungere anche questa ...