Jump to content
rnightbane

ADC and USB Data sending to MatLab

Recommended Posts

Okay, so I found out from my previous post that the output value from the ADC can be accessed through pui32ADC0Value...now, im trying to send that data via USB device mode in Tiva, however, my concerns are will my code work? And if it works, how do I access that data via MatLab. Thanks

 

Once again, credits to the maker of the ADC code.

 

#include <stdbool.h>

#include <stdint.h>

#include "inc/hw_memmap.h"

#include "driverlib/adc.h"

#include "driverlib/gpio.h"

#include "driverlib/sysctl.h"

#include "driverlib/adc.h"

#include "inc/hw_types.h"

#include "driverlib/debug.h"

#include "driverlib/usb.h"

#include "usblib/usblib.h"

#include "usblib/usblibpriv.h"

#include "usblib/device/usbdevice.h"

#include "usblib/device/usbdevicepriv.h"

 

main(void) {

 

uint32_t pui32ADC0Value[1];

 

SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN| SYSCTL_XTAL_16MHZ);                                                                            //Set clock at 40 Mhz , Sometimes                                                                          //ADC may not work at 80Mhz 

SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

ADCReferenceSet(ADC0_BASE, ADC_REF_INT); //Set reference to the internal reference

                                        // You can set it to 1V or 3 V

GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_5); //Configure GPIO as ADC

 

ADCSequenceDisable(ADC0_BASE, 3); //It is always a good practice to disable ADC prior                                                        //to usage ,else the ADC may not be accurate                                                               //   due to previous initializations                  

ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0); //Use the 3rd Sample sequencer                                                                    

 

ADCSequenceStepConfigure(ADC0_BASE, 3, 0,ADC_CTL_CH8 | ADC_CTL_IE | ADC_CTL_END); 

//Configure ADC to read from channel 8 ,trigger the interrupt to end data capture //          

 

ADCSequenceEnable(ADC0_BASE, 3);   //Enable the ADC

ADCIntClear(ADC0_BASE, 3);     //Clear interrupt to proceed to  data capture

 

uint8_t* Data = "pui32ADC0Value";

//

// Configure Endpoint 1.

//

USBDevEndpointConfigSet(USB0_BASE, USB_EP_1, 64, //DISABLE_NAK_LIMIT, 

                        USB_EP_MODE_BULK | USB_EP_DEV_IN);

//

// Configure FIFO as a device IN endpoint FIFO starting at address 64

// and is 64 bytes in size.

//

USBFIFOConfigSet(USB0_BASE, USB_EP_1, 64, USB_FIFO_SZ_64, USB_EP_DEV_IN);

 

while (1) {

ADCProcessorTrigger(ADC0_BASE, 3);   //Ask processor to trigger ADC

while (!ADCIntStatus(ADC0_BASE, 3, false))

{ //Do nothing until interrupt is triggered

}

 

ADCIntClear(ADC0_BASE, 3); //Clear Interrupt to proceed to next data capture                                          

ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value); //pui32ADC0Value is the value read                                                                     

 

SysCtlDelay(SysCtlClockGet() / 12);

 

 //

// Put the data in the FIFO.

//

USBEndpointDataPut(USB0_BASE, USB_EP_1, Data, 64);

//

// Start the transmission of data.

//

USBEndpointDataSend(USB0_BASE, USB_EP_1, USB_TRANS_IN);

 

//USBEndpointDataGet(USB0_BASE, USB_EP_1, Data, 32);

} //Suitable delay

 

}

Share this post


Link to post
Share on other sites

why you don't use CDC communicate with PC,them you could get return data from rs232 protocol. 

 

They probably meant using USB CDC (Communications Device Class), which creates a virtual serial port running across the USB connection.

You can use the debug port on the launchpad (which provides a virtual serial port connected to UART0 on the launchpad processor).

Or you could use the launchpad processors USB port and build your own USB CDC driver.

In either case it would look like a serial port from the point of view of your host operating system.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×