Gast
#1746252
Hallo zusammen,
ich habe ein Denkproblem,
ich möchte meine enpfangene von einem ADC bits einordnen und später via
UART weitersenden.
Die ausgelöste fallende Interupt INT0 auf den PORTD soll der transfert
starten. Mein ADC spuckt pro Messung bzw. kanal 20 bit und habe ich 8
kanäle angeschloßen. Wie kann ich die empfangene Bits einordnen und
weiter via UART weitersenden. hat jemand ein Tipp.
ich benutze ATXmega128a1 und STK600
Hier meine code:
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include "spi_driver.h"
#include "port_driver.h"
uint8_t Data_Shift_Count;
uint8_t Receive_Data[n];
uint8_t n;
uint8_t Kanal;
unsigned char Channel;
int main (void)
{
PORT_SetPinsAsInput( &PORTD, 0x01); // fuer INT0 (extern interrupt)
PORT_ConfigurePins( &PORTD,
0x01,
false,
false,
PORT_OPC_WIREDANDPULL_gc,
PORT_ISC_FALLING_gc ); /* Sense Falling Edge */
PORT_ConfigureInterrupt0( &PORTD, PORT_INT0LVL_MED_gc, 0x01 );//
Configure Interrupt0 to have medium interrupt level, triggered by pin 2.
*/
PMIC.CTRL |= PMIC_MEDLVLEN_bm;//Enable medium level interrupts in the
PMIC.
sei();//Enable the global interrupt flag.
SPID_CTRL = (1<<SPI_MASTER_bm) | (1<<SPI_CLK2X_bm) |
(1<<SPI_ENABLE_bm);//MOSI & SCK,enable spi,clk/ 32Mhz????
SPIF_INTCTRL |= (1<<SPI_INTLVL1_bm);
sei();//Enable the global interrupt flag.
while (1)
}
ISR(PORTD_INT0_vect )
{
SPID_DATA= 0xFF;// initiate the data transmission
while (!(SPID_STATUS &(1<<SPI_IF_bm)))// wait for complet
transmission
Data_Shift_Count = 0;
}
ISR(SPID_STC_vect)
{
Data_Shift_Count++;//erhöt der counter
Receive_Data[n]=SPID_DATA;
do {
switch(Kanal){
case 1: Channel =Receive_Data ; // ch = 10001111 Bit 20
to bit 13
Data_Shift_Count++;
case 2: Channel = Receive_Data; // ch = 10011111 Bit
12....bit9
Data_Shift_Count++;
case 3: Channel = 0xAF; // ch = 10101111 bit8....1
Data_Shift_Count++;
case 4: Channel = Receive_Data; // ch = 10111111
case 5: Channel = Receive_Data; // ch = 11001111
case 6: Channel = Receive_Data; // ch = 11011111
case 7: Channel = Receive_Data; // ch = 11101111
case 8: Channel = Receive_Data; // ch = 11111111
.
.
.
.
.
case 23: Channel:
default: Channel = Receive_Data;
};
}(Data_Shift_Count<=20);
uint8_t resultat = Channel;
}
Danke
Thom