器件型号:DK-TM4C129X
工具/软件:TI-RTOS
嗨、大家好、我不熟悉 CCS、也不使用 TI-RTOS。 我想在多线程中同步代码、因为我在 main 中调用两个函数。一个是使用 ADC、另一个是使用 RTOS 的 USB 鼠标主机示例、但我无法理解如何在这里使用、我可能会发布我的当前代码 谢谢。
/*
*==== spilopopback.c =====
*
/* XDCtools 头文件*/
#include
#include
#include
#include
/* BIOS 头文件*/
#include
#include
/* TI-RTOS 头文件*/
#include
#include
/*示例/板头文件*/
#include "Board.h"
/* Tiva RC 接头*/
#include
#include
#include
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "C:\ti\TivaWare_C_Series-2.1.3.156\driverlib\adc.h"
#include "inc/hw_ints.h"
#include "C:\ti\TivaWare_C_Series-2.1.3.156\driverlib\sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/SysTick .h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#define SPI_MSG_LENGTH 4 //一个寄存器中一个字节的长度
#define TASKSTACKSIZE 768//size of one task
/*在存储器的.dma 段中为协处理设备分配缓冲区*/
#ifdef Mware
#pragma DATA_SECTION (masterRxBuffer、".dma");
#pragma DATA_SECTION (masterTxBuffer、".dma");
#pragma DATA_SECTION (slaveRxBuffer、".dma");
#pragma DATA_SECTION (slaveTxBuffer、".dma");
#endif
Task_Structuretask0Struct;//任务结构
char task0stack[TASKSTACKSIZE];
char masterRxBuffer[SPI_MSG_length];//将保存接收到的数据的缓冲区
char masterTxBuffer[SPI_MSG_length];//数据保存在此缓冲区中以供发送
空 masterTaskFxn (UARg arg0、UARg arg1)
{
无符号长整型 ulADC0Value[1];
无符号长整型 ulADC0Value1[14];
volatile unsigned long ulTempAvg;
volatile unsigned long ulTempAvg1;
volatile unsigned long ulTempValueC;
volatile unsigned long ulTempValueF;
// SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_25MHz);
// SysCtlClockSet (SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |SYSCTL_XTAL_25MHz);
SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |SYSCTL_CFG_VCO_480)、120000000);
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);//启用 ADC0
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);//启用端口 E
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_1);//定义引脚 PE1
ADCSequenceDisable (ADC0_BASE、3);
ADCSequenceDisable (ADC0_BASE、2);
ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceConfigure (ADC0_BASE、2、ADC_TRIGGER_PROCESSOR、0);
//通道2 PE1
ADCSequenceStepConfigure (ADC0_BASE、2、0、ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC0_BASE、2、1、ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC0_BASE、2、2、ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC0_BASE、2、0、ADC_CTL_CH2 | ADC_CTL_IE | ADC_CTL_END);
//通道 TS
ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceEnable (ADC0_BASE、3);
ADCSequenceEnable (ADC0_BASE、2);
//********
ADCProcessorTrigger (ADC0_BASE、3);
ADCProcessorTrigger (ADC0_BASE、2);
//等待转换
while (!ADCIntStatus (ADC0_BASE、3、false)){}
while (!ADCIntStatus (ADC0_BASE、2、false)){}
//获取值
ADCSequenceDataGet (ADC0_BASE、3、ulADC0Value);
ADCSequenceDataGet (ADC0_BASE、2、ulADC0Value1);
ulTempAvg =(ulADC0Value[0]);
ulTempAvg1 =(ulADC0Value1[0]+ulADC0Value1[1]+ulADC0Value1[2]+ulADC0Value1[3])/4;
ulTempValueC =(1475 -((2475 * ulTempAvg))/ 4096)/10;
ADCIntClear (ADC0_BASE、3);
ADCIntClear (ADC0_BASE、2);
//*******
}
void maasterTaskFxn (UArg0、UArgarg1)
{
System_printf ("------------------------------------------ 新-------------------------------------- ");
}
/*
*==== main ====
*
void main (void)
{
Task_Params taskParams;
Board_initGeneral();
Board_initGPIO();
Board_initSPI();
GPIO_WRITE (Board_LED0、Board_LED_ON);//引脚编号 PQ7处的新芯片选择设置为高电平
Task_Params_init (&taskParams);//初始化任务
taskParams.priority = 1;//任务参数
taskParams.STACKSIZE = TASKSTACKSIZE;
taskParams.stack =_task0Stack;
Task_construct(&task0Struct,(Task_FuncPtr) masterTaskFxn、&taskParams、NULL);
Task_Params_init (&taskParams);//初始化任务
taskParams.priority = 2;//任务参数
taskParams.STACKSIZE = TASKSTACKSIZE;
taskParams.stack =_task0Stack;
Task_construct(&task0Struct,(Task_FuncPtr) maasterTaskFxn、&taskParams、NULL);
//GPIO_WRITE (Board_LED0、Board_LED_OFF);
system_flush();
System_printf ("------------------------------------------ 新-------------------------------------- ");
system_flush();
/*启动 BIOS */
BIOS_start();//在 BIOS 中启动任务。
//返回(0);
while (1);
}