Thread 中讨论的其他器件:SYSBIOS
您好!
我想 使用 TI -RTOS 将一些变量数据存储到 TM4C1294上的闪存中。 请检查我随附的代码部分
TI RTOS v 2.16.01.14
GNU 编译器 v 7.2.1 (Linaro)
此致
霍迪达斯
//*版权所有(c) 2014,Texas Instruments Incorporated *保留所有权利。 **只要符合以下条件*、允许以源代码和二进制形式重新分发和使用:**源代码的重新分发必须保留上述版权声明*、此条件列表和以下免责声明。 ****二进制形式的再发行必须在*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 ****未经事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。 **本软件由版权所有者和贡献者"按原样"提供*、不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或*贡献者都不对任何直接、间接、偶然、特殊、*模范、 或相应的损害(包括但不限于*采购替代产品或服务;丧失使用、数据或利润; *或业务中断)、但出于任何责任理论、*无论是在合同中、严格责任还是由于使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)、*即使已获悉可能会发生此类损坏。 ///*=== tcpEcho.c ==== ////* XDCtools 头文件*/#include #include #include #include #include #include /* BIOS 头文件*/#include #include #include /* NDK 头文件*/#include #include /* TI-RTOS 头文件*/#include /*示例/Board 头文件*/#include "Board.h"#include #include #include #include #include "inc/hw_type.h"#include "inc/hw_memmap.h"#include "driverlib/driver.h"#include "driverlib/driver.h"#include "driverlib/driver.h"#include "#include "driverlib.包含"#hw_lib.包含#driverh/driver.h"#include #include "#include "driverlib.包含#driver.h"#include "#include "#driverlib.包含"#driverlib.包含#driver.h"#include "#include "driverlib.包含"#driver.h"#include "#driverlib.包含"#driverlib"#driver.h"#include "#include "driverlib.包含#driver.h"#include "#include "#include "#include "#include "#driverlib.包含"#include "#driverlib.包含"#include "#driverlib.包含"driver.h"#include "driverlib.包含 (((uint32_t*) 0x00020000)#define Size_N 1000 #define Size_HN 500 //=================================== 以太网=========================== //#define TCPPACKETSIZE 1024 #define TcpPort 8080 #define NUMTCPWORKERS 3 //=========================================== 以太网接口================================= // uint32_t g_ui32SysClock;//=========================================================== //套接字 lSocket;struct socaddr_in sLocalAddr;char MyData[41];//================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== /////========================================= ADC 输入========================= //#define ADC_SAMPLE_BUF_SIZE (1)// uint32_t ui32Config、ui32ClockDiv;//对于 ADC 时钟测试 uint32_t udmaCtrlTable[1024]__attribute__(aligned (1024));uint32_t ADC_out_1_[6]、intry_ft、inuVdf、t_t、intryf、inf、t_uVdf、t_t、inf、t_uVdf、t_uVds、t_eet、t_inf、t_inf、t_inuVdf、t_uVds、t_e4、t_inf、t_inuVdf、 //================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ // uint16_t rf_forward[size_N]、rf_reverse[size_N]、temperature [size_N]、VD[size_N]、VGS[size_N];uint8_t DIGI_COUNTER[size_N];uint16_t flash_counter;block=uint8;uintool = uint0_t;uint0_t uint32_t gp_count;void gpioButtonFxn0 (unsigned int index){//清除 GPIO 中断并切换 LED */ ar=1;gp_count++;//gpio_toggle (Board_LED1);sprintf (MyData、"*D01$%lu、%lu、%lu、%io、%out1、inc1、i1、inc1、inu1、inu1、inu1、inc1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、inu1、 (char *) myData、sizeof (MyData)、0);//GPIO_clearInt (Board_Button1);}void ADCSeq0Handler (void){//清除中断标志。 ADCIntClear (ADC0_BASE、0);// uint32_t ui32Mode = uDMAChannelModeGet (UDMA_CHANGE_ADC0);if (uDMAChannelModeGet (UDMA_CHANGE_ADC0|UDMA_PRI_SELECT)= 0);// uDMA_PRI_CO_0 (UDMA_PRI_BOO0+、UCC0_IN_ADDR_INTS_0);uDMA_INTRIBUS_0 (UDMA_PRI_CO_IN_IN_IN_0)+(UDMA_PRI_CO_ADTRIBUS_0)+、UANCE_IN_0 (UDMA_PRI_CO_IN_IN_IN_IN_ADPRI_MA0_0)+(UANCE_ADTRUDC_IN_0)+、UDMA_PRI_CO_IN_IN_IN_IN_ADTRIBUS_0 (UANCE_0、UDC_IN_IN_IN_0 (UDC_ GPIO_PIN_3、0x00);}if (uDMAChannelModeGet (UDMA_CHANGE_ADC0|UDMA_ALT_SELECT)= 0){// GPIOPinWrite (GPIO_Porth_BASE、GPIO_PIN_3、0x08);uDMAChannelTransferSet (UDMA_PEN)= 0);uDMA_ADC0_ENABLE_ADAP_END0 (UDMA_MA_MA_MA_MA_BOOPT_MA_BOOPT_0);UANCE_AD0_MA_MA_MA_MA_MA0_BOOPT_MA_BOOPT_AD0|END0 (UTS_MA_MA_MA_MA_MA_MA_BOOPT_BOOPT_BOOPT_BOOPT_MA_MA_MA_MAIN);END0 (UANCE_MA_MA_MA_ }void InitUDMA (void){uDMAEnable();//启用 UDMA uDMAControlBaseSet (udmaCtrlTable);//IntEnable (INT_UDMA);uDMAChannelAttributeDisable (UDMA_CHANGE_ADC0、UDMA_ATTR_ALL);//配置通道控制表的基址。 表驻留在系统内存中并保存每个 uDMA 通道的控制//信息。 表必须在1024字节边界上对齐。 UDMAChannelAttributeEnable (UDMA_CHANNE_ADC0、UDMA_ATTR_USEBURST);uDMAChannelControlSet (UDMA_CHANNE_ADC0)| UDMA_ADCC_SELECT、UFIFO_SIZE_32 | UDMA_ADCC_OUTS_ADCC_NOT_UDMA_ADCC0 | UDMA_ADCC_ADCC_ADCC_ADCC_NOT_UTS_DR_ADCC_DR_DR_ADCC_0 | UCC_ADCC_ADCC_ADCC_NOT_UTS_DR_ADCC_ADCC_ADCC_NOT_UTS_ADCC_ADCC_NOT_UTS_DR_DR_ADCC_DR_NE_ADCC_DR_NE_ADCC_ADCC_0 | UDB_ADCC_ADCC_ADCC_ADCC_ADCC_0 | UTS_ADCC_ADCC_ADCC_NOT_NE_ADCC_ADCC_ADCC_ADCC_NOT_NE_ADCC_ADCC_ADCC_ADCC_AD uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT、UDMA_MODE_PINGONG、(void *)(ADC0_BASE + ADC_O_SSFIFO0)、ADC_OUT_2、6);uDMAChannelEnable (UDMA_CHANGE0);/ADC0 (ADCC_INT_ENDRES0_ADC0);/ADDR_INT_INT_ANCE_ADCINT (ADCC0) //由于 ADC 采样序列上的 DMA 而使能 ADC 中断源// IntEnable (INT_ADC0SS0);ADCIntRegister (ADC0_BASE、0、ADCSeq0Handler);IntMasterEnable ();#endif}void InitConsole (void){SysCtl_Periph_ADC10_PeripheralCtl(SysCtl_SysCtl_Periph_ADC10_RESET_ADSYSRET_0);Peripherale0_Periptl (SysCtl_Ont_Ont_SysCtl_Ont_Ont_Ont_Ont_Ont_Ont_Ont_Ont_Ont_Ontore0_Ontor_Ontore0_Ontore0_Ontor_Ontor_Ontor_Ontor_ GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);//RF_Forward GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_2);//RF_REVERSE SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK); GPIOPinTypeADC (GPIO_PORTK_base、GPIO_PIN_0);//温度 GPIOPinTypeADC (GPIO_PORTK_base、GPIO_PIN_1);//VDS GPIOPinTypeADC (GPIO_PORTK_base、 GPIO_PIN_2);//ID GPIOPinTypeADC (GPIO_PORTK_base、GPIO_PIN_3);//VGS //ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、 1);IntDisable (INT_ADC0SS0);ADCIntDisable (ADC0_BASE、0);ADCSequenceDisable (ADC0_BASE、 0);#if DMA ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_AUSEase、0); #else ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_processor、0);#endif ADCSequenceStepConfigure (ADC0_BASE、 0、0、ADC_CTL_CH0);ADCSequenceStepConfigure (ADC0_BASE、0、 1、ADC_CTL_CH1);ADCSequenceStepConfigure (ADC0_BASE、0、2、 ADC_CTL_CH16);ADCSequenceStepConfigure (ADC0_BASE、0、3、ADC_CTL_CH17); ADCSequenceStepConfigure (ADC0_BASE、0、4、ADC_CTL_CH18);ADCSequenceStepConfigure (ADC0_BASE、 0、5、ADC_CTL_CH19|ADC_CTL_END);ADCHardwareOversampleConfigure (ADC0_BASE、64); ADCSequenceDMAEnable (ADC0_BASE、0);ADCSequenceEnable (ADC0_BASE、0);}void digit_init (){SysPeripheralEnable (SYSCTL_Periph_GPIOK);//PSFLT GPIOPPinTypeGPIOInput (GPIO_PORTK_base、GPIO_PORTK_BASE、GPIO_GPIOPORTK_4);GPIOPORTK_IN_IN_GPIO_GPIO_DIORTK_BASE、GPIO_GPIO_GPIO_GPIO_IN_INITH_GPIORTK_4;GPIORT_FO4_IN_IN_GPIORTK_4引脚 GPIORTK_IN_IN_IN_IN_GPIORTK GPIO_PIN_5);//ARC // GPIOModeSet (GPIO_PORTK_base、GPIO_PIN_5、GPIO_DIR_MODE_IN);GPIOPinTypeGPIOInput (GPIO_PORTK_base、GPIO_PIN_6);//IDSLW GPIODirModeSet (GPIO_PORTK_BASE_6);GPIO_DIR_IN GPIOCtlPinTypeGPIOInput (GPIO_PORTK_base、GPIO_PIN_7);//TEMP GPIODirModeSet (GPIO_PORTK_base、GPIO_PIN_7、GPIO_DIR_MODE_IN);HWREG (GPIO_PORTD_BASE + GPIO_LOCK_KEY)= GPIO_LOCK_RESET_IN_GPIORT_GPIORT_PLUST_INESS;GPIORT_GPIO_PLORT_GPIORT_IN_IN_IN_IN_GPIORT_GPIORT_GPIORT_GPIORT_PROBLE_GPIORT_IN_IN_7 (GPIOR_IN_IN_GPIORT_GPIOR_IN_IN_IN_IN_GPIORT_GPIORT_GPIORT_GPIOR_IN_IN_IN_IN_IN_IN_IN_GPIORT_GPIORT_GPIORT_GPIOR_IN_IN_IN_IN_TOP_ GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_6);GPIOPadConfigSet (GPIO_PORTD_base、GPIO_PIN_6、GPIO_FORECT_10mA、GPIO_PIN_TYPE_STD_WPU);GPIODirModeSet (GPIO_PORTD_base、GPIO_PIN_6、GPIO_PHIN、GPIO_PHIN_TO_PHIN);GPIO_PIO_PHY_ORDIR_PHIN (GPIO_PHIN) GPIO_PIN_6、0x02);SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);//互锁引脚 GPIOPinTypeGPIOOutput (GPIO_PORTM_base、GPIO_PIN_1); GPIOPadConfigSet (GPIO_PORTM_BASE、GPIO_PIN_1、GPIO_Strength _10mA、GPIO_PIN_TY_STD_WPU);GPIODirModeSet (GPIO_PORTM_BASE、GPIO_PIN_1、GPIO_DIR_MODE_OUT);GPIOWrite (GPIO_PORTM_BASE、0x02_PIN1);GPIO_PIN_PIN1 SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);//对于 LED GPIOPinTypeGPIOOutput (GPIO_Porth_BASE、GPIO_PIN_3);GPIOPinWrite (GPIO_Porth_BASE、GPIO_PIN_3、0x0);} /*=== tcpHandler ==== *创建新任务以处理新的 TCP 连接。 //空 tcpHandler (UArg0、UArg0 arg1){fdOpenSession (TaskSelf));lSocket = socket (AF_iNet、SOCK_stream、IPPROTO_TCP);if (lSocket < 0){// System_printf ("tcpHandler:memfailed\n");Task_exit (Localsocket)(0);return (Addr) sizeof (sLocalAddr));sLocalAddr.Sin_Family = AF_iNet;//sLocalAddr.Sin_addr.s_addr = inet_adinet ("192.168.0.135");//htonl (INADDR_ANY);sLocalAddr.Sin_addr.s_adr.s_adl = 192.168.1.5";sLocalAddr_adton/("ninr_adton_0+(inr);sLocalAddr_adton_adtonr.intranes = 192.168.135"(in_adtin_adtin_adtin_adtin while (connect (lSocket、(struct sockadr *)&sLocalAddr、sizeof (sLocalAddr))< 0){SysCtlDelay (400000);}// System_flush ();InitConsole ();InitUDMA ();while (TRUE){#if DMA #else // GPIO_toggle (Board);InitC0;InitCADC0;while (trigger);while (t_ProcessC0) ADC_OUT_1);IF (uDMAChannelModeGet (UDMA_CHANGE_ADC0|UDMA_PRI_SELECT)= 0){uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT、UDMA_MODE_BASIC、(void *)(ADC0_CHANGE_ADC0+ UDMA_CAREF_ADC0);UDA_ADC0 +通道 UDA_ADC0 (UDA_ADC0);UDA_AUDANCE_CA_CA_CA_RAM0+ 1、UDA_CAST_ADQ_RAM0+(UDA_ADC0);UDA_ADC0 +通道 UDA_ADC0 /*RF_Forward [FLASH_COUNTER]= ADC_OUT_1[1];RF_REVERSE[FLASH_COUNTER]= ADC_OUT_1[2];TEMPRAT[FLASH_COUNTER]= ADC_OUT_1[3];VDS[FLASH_COUNTER]= ADC_OUT_1[4];ID[FLASH_COUNTER]= ADC_OUT_1[5]; vgs[flash_counter]= adc_out_1_[0];*/#endif memMove (&rf_forward[0]、&rf_forward[1]、(size_N - 1)* sizeof (rf_forward[0]);rf_forward[size_N]= adc_out_1_temperature (siz_1)(siz_1)、size[0]](n_out_1)、size[0]](rf_1)、size_1)、size[0]](n_out_1)、size_1 (rf_1)、size_1 (n_1)、size_1 (1)、size[0[0[0](rf_out_1)、size_1)、size_1 (n_1)、size_1 (vdvd_1 (1)、size[0[0](1)、size_1)、size_1 (vd_1)、size[0[0[0[0](r_1)、size_1、size_1)、size_1 VDS[SIZE_N - 1]= ADC_OUT_1[4];memMove (&ID[0]、&ID[1]、(Size_N - 1)* sizeof (ID[0]);ID[SIZE_N - 1]= ADC_OUT_1[5];memmove (&VARC[0]、VEST_PIN_0]+GPIO_1、GPIO_1、GPIO_1、GPIORTS_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIORTS_PIN_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIORTS_PIN_PIN_ORTS_PIN_ORTS_PIN_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_1、GPIO_EST_PIN_PIN_GPIO_1、GPIORTS_GPIO_1、GPIO_1、GPIO_1、 MAIN_IN=GPIOPinRead (GPIO_PORTD_base、GPIO_PIN_7);DIGI_IO =(MAIN_IN << 0)+(TEMP << 1)+(IDSLW << 2)+(ARC << 3)+(PSFLT << 4);memmove (&DIGI_IN_0)+(IDS<1)+(IRF_1)/DIFF_1)/IGN[0]/ IG0_IN_1 (IG0_IN_1)/IGUDIFF_1 / IG0[ADC=/IG0]/ IG0_1 (IG0_1)/IGN_1)/[IGUDI_1 / IG0_1 / IG0_1 / IG0_1 / IGUFF_1 / IG0_1 / IGN_1 / IGN_1 / IG0_1 / IGN/ IGN/ IG0_1 / IGU/ IG0_1 / IG0_1 / IGN/ IGN/ IGU/ IG0 //PK1 // ID =ADC_OUT_1[5];//PK2 // VGS =ADC_OUT_1[0];//PK3 if (ADC_OUT_1[1]> 4102 || ADC_OUT_1[2]> 4102 || ADC_OUT_1[3|_OUT_1|ADC_OUT_1|ADC_OUT_1|[0_1|ADC_OUT_1|[0_GPIO_1|[0_1|_1|_IN_1|_1|_1|_OUT_GPIO_1|[0_1|_1|_1|_1|_1|_0_1|_1|_0_1|_1|_0_1|_1|_0_1|_1|_0_1|_0_1|_1|_0_1|_0_1|_0_1|_0_1|_1|_0_1|_0_1|_0_1|_ LOCK =true;}//否则//{// GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_1、0x00);// LOCK =false;//}if (LOCK){GPIO_TOGGLE (Board_LED1);FLASH_COUNTER++;GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_1、0x02); uint32_t pui32Data[2]、ReadData[2];if (flash_counter>=500){pui32Data[0]= 0x00000008;pui32Data[1]= 0x56789def;FlashProgram (pui32Data、flash_base_ADDR、sizeof (pui32Data)); // FlashProgram (RF_Forward、FLASH_BASE_ADDR、sizeof (RF_Forward));FLASH_COUNTER=0;ReadData[0]= FLASH_BASE_ADDR[0]; ReadData[1]=FLASH_BASE_ADDR[1];// while (1);}if (counter>10){ GPIOPinWrite (GPIO_Porth_BASE、GPIO_PIN_3、0x08);counter=0;sprintf (MyData、"*D01$%Lu、%Lu、%Lu、%Lu、%Ln、GPIO_PIN_3、0x08);counter=0、sprint_out、s1[ADC_out1、g_out1、s%d_out1、s_dc_out_out_1]_out_out1、s[ADC_out_out_1]_out_out1、s[ADC_out_out_out_1]_out_out_out_out_out_out_1][ADC_out_out_1]_out_out1、ADC_out_out1 send (lSocket、(char *) myData、sizeof (MyData)、0);}}}//*==== main ==== // int main (void){// Task_handle taskHandle;// Task_Params taskParams;// Error_Block EB;g_ui32init Clock = SysCtlClockFreqSet ((sysctl_XTAL_25MHz initsysctl_osc_main | sysc_use_PLL | sysCtl|sysclockFreqSet)(sysctl Board_rtc);/initsysctce_c2000_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_pru_prue_ gpioButtonFxn0);//启用中断*/ GPIO_enableInt (Board_BUTTON0);// ui32Config = ADCClockConfigGet (ADC0_BASE,&ui32ClockDiv);//开始 BIOS */ BIOS_start();return (0);}