Part Number: TMS570LC4357
The following is the code provided in the examples of TMS570LC4357.
/** @example example_adcDisplay.c
* This is an example which describes the steps to create an example application which
* configures ADC to start conversion ona GIO trigger and display it over an uart .
* The digital value can be viewed on a pc terminal with the uart configures @ 9600
* no parity ,2 stop bits.
*
*
* @b Step @b 1:
*
* Create a new project.
*
* Navigate: -> File -> New -> Project
*
* @image html example_createProject.JPG "Figure: Create a new Project"
*
* @b Step @b 2:
*
* Configure driver code generation:
* - Enable GIO driver
* - Enable SCI driver
* - Enable ADC driver
* - Disable others
*
* Navigate: -> TMS570LCxx /RM5x -> Enable Drivers
*
* @image html adcDisplay_enabledriver.JPG "Figure: SCI Enable Driver"
*
*
* @b Step @b 3:
*
* Navigate: -> TMS570LCxx /RM5x -> ADC
*
* Configure ADC General :
*
* @image html adcDisplay1.JPG "Figure: ADC General Configuration"
*
*
* @b Step @b 4:
*
* Configure ADC Group1 :
*
* - Configure ADC Group 1 with "Hardware trigger" source as "GIOB0" at "Rising edge"
* - Enable ADC1 Group 1 channel selection Pin 0 and Pin 1
*
* @image html adcDisplay2.JPG "Figure: ADC Group Configuration"
*
* @b Step @b 5:
*
* Configure SCI:
* - Configure SCI baudrate as 9600
*
* Navigate: -> TMS570LCxx /RM5x -> ADC
*
* @image html sci_uart1.JPG "Figure: SCI Configuration"
*
* @b Step @b 6:
*
* Copy the source code below into your sys_main.c or replace sys_main.c with this file.
*
* The example file can also be found in the examples folder: ../HALCoGen/examples
*
* @note HALCoGen generates an empty main function in sys_main.c,
* please make sure that you link in the right main function or copy the source into the user code sections of this file.
*
*
*/
/*
* Copyright (C) 2009-2015 Texas Instruments Incorporated - www.ti.com
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
*
* Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* USER CODE BEGIN (0) */
/* USER CODE END */
/* Include Files */
#include "HL_sys_common.h"
#include "HL_system.h"
/* USER CODE BEGIN (1) */
#include "HL_esm.h"
#include "HL_adc.h"
#include "HL_sci.h"
#include "HL_gio.h"
#define TSIZE1 12
uint8 TEXT1[TSIZE1]= {'\r','\n','|','\t','C','H','.','I','D','=','0','x'};
#define TSIZE2 9
uint8 TEXT2[TSIZE2]= {'\t','V','A','L','U','E','=','0','x'};
adcData_t adc_data[2];
void sciDisplayText(sciBASE_t *sci, uint8 *text, uint32 length);
void sciDisplayData(sciBASE_t *sci, uint8 *text,uint32 length);
void wait(uint32 time);
/* USER CODE END */
/** @fn void main(void)
* @brief Application main function
* @note This function is empty by default.
*
* This function is called after startup.
* The user can use this function to implement the application.
*/
/* USER CODE BEGIN (2) */
/* USER CODE END */
void main(void)
{
/* USER CODE BEGIN (3) */
uint32 ch_count=0;
uint32 id =0;
uint32 value =0;
/* initialize gio */
gioInit();
gioSetDirection(gioPORTB, 1);
/* initialize sci/sci-lin : even parity , 2 stop bits */
sciInit();
/* initialize ADC */
/* Group1 -> Channel 0 and 1 */
/* HW trigger trigger source as GIOB Pin 0 */
adcInit();
/* start adc conversion */
adcStartConversion(adcREG1,adcGROUP1);
while(1) /* ... continue forever */
{
/* trigger using gio port b, pin 0 */
gioSetBit(gioPORTB, 0, 1);
/* ... wait and read the conversion count */
while((adcIsConversionComplete(adcREG1,adcGROUP1))==0);
ch_count = adcGetData(adcREG1, adcGROUP1,&adc_data[0]);
ch_count = ch_count;
/* conversion results : */
/* adc_data[0] -> should have conversions for Group1 channel1 */
/* adc_data[1] -> should have conversions for Group1 channel2 */
id = adc_data[0].id;
value = adc_data[0].value;
gioSetBit(gioPORTB, 0, 0);
sciDisplayText(sciREG1,&TEXT1[0],TSIZE1); /* send text 1 */
sciDisplayData(sciREG1,(uint8*)&id,4); /* send data 1 */
sciDisplayText(sciREG1,&TEXT2[0],TSIZE2); /* send text 2 */
sciDisplayData(sciREG1,(uint8*)&value,4); /* send data 2 */
id = adc_data[1].id;
value = adc_data[1].value;
sciDisplayText(sciREG1,&TEXT1[0],TSIZE1); /* send text 1 */
sciDisplayData(sciREG1,(uint8*)&id,4); /* send data 1 */
sciDisplayText(sciREG1,&TEXT2[0],TSIZE2); /* send text 2 */
sciDisplayData(sciREG1,(uint8*)&value,4); /* send data 2 */
wait(0xFFFFF);
};
/* USER CODE END */
}
/* USER CODE BEGIN (4) */
void sciDisplayData(sciBASE_t *sci, uint8 *text,uint32 length)
{
uint8 txt = 0;
uint8 txt1 = 0;
#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1))
text = text + (length -1);
#endif
while(length--)
{
#if ((__little_endian__ == 1) || (__LITTLE_ENDIAN__ == 1))
txt = *text--;
#else
txt = *text++;
#endif
txt1 = txt;
txt &= ~(0xF0);
txt1 &= ~(0x0F);
txt1 =txt1>>4;
if(txt<=0x9)
{
txt +=0x30;
}
else if(txt > 0x9 && txt < 0xF)
{
txt +=0x37;
}
else
{
txt = 0x30;
}
if(txt1 <= 0x9)
{
txt1 +=0x30;
}
else if((txt1 > 0x9) && (txt1 <= 0xF))
{
txt1 +=0x37;
}
else
{
txt1 = 0x30;
}
while ((sciREG1->FLR & 0x4) == 4); /* wait until busy */
sciSendByte(sciREG1,txt1); /* send out text */
while ((sciREG1->FLR & 0x4) == 4); /* wait until busy */
sciSendByte(sciREG1,txt); /* send out text */
};
}
void sciDisplayText(sciBASE_t *sci, uint8 *text,uint32 length)
{
while(length--)
{
while ((sciREG1->FLR & 0x4) == 4); /* wait until busy */
sciSendByte(sciREG1,*text++); /* send out text */
};
}
void wait(uint32 time)
{
while(time){time--;};
}
/* USER CODE END */
Can someone explain to me what is happening in the
void sciDisplayData(sciBASE_t *sci, uint8 *text,uint32 length)
part of the code?
Also can someone please tell why there are two sciSendByte functions
sciSendByte(sciREG1,txt); and sciSendByte(sciREG1,txt1);
nested in the same function.