/*******************************************************************************************************/ #define KEY1 GPIO_PIN_4 #define UART0_PIN GPIO_PIN_0 | GPIO_PIN_1 /*******************************************************************************************************/ static volatile const unsigned char *g_pucBuffer = 0; // 发送数据缓冲区指针 static volatile unsigned long g_ulCount = 0; // 发送数据个数
static unsigned char g_pucString[2]; /*******************************************************************************************************/ void WaitJTAG(void) //防JTAG失效代码 { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIODirModeSet(GPIO_PORTD_BASE,KEY1,GPIO_DIR_MODE_IN); if(GPIOPinRead(GPIO_PORTD_BASE,KEY1)==0x00) { for(;;); } SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOD); } /*******************************************************************************************************/ void Initial(void) //初始化模块 { //初始化ADC模块 SysCtlClockSet(SYSCTL_SYSDIV_10|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_6MHZ); //配置PLL SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); // 使能ADC模块的时钟 SysCtlADCSpeedSet(SYSCTL_ADCSPEED_250KSPS); // 250KSps采样率 ADCSequenceDisable(ADC_BASE, 0); // 禁能所有采样序列 ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0); // 采样序列0为处理器触发 ADCSoftwareOversampleConfigure(ADC_BASE, 0, 2); //2倍过采样 ADCSoftwareOversampleStepConfigure(ADC_BASE, 0, 0,ADC_CTL_CH0|ADC_CTL_END); // 采样序列0的第0步使用ADC0,完成第0步后结束 ADCSequenceEnable(ADC_BASE, 0); // 使能采样序列0 //初始化UART模块 SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); IntMasterEnable(); GPIODirModeSet(GPIO_PORTA_BASE, UART0_PIN, GPIO_DIR_MODE_HW); UARTConfigSet(UART0_BASE,9600,(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE)); // 配置UART 为 9600波特率, 8-N-1模式发送数据。 UARTIntEnable(UART0_BASE, UART_INT_TX); IntEnable(INT_UART0); } /*******************************************************************************************************/ void UART0_ISR (void) // UART0中断服务函数 { unsigned long ulStatus; ulStatus = UARTIntStatus(UART0_BASE, true); // 获得中断状态。 UARTIntClear(UART0_BASE, ulStatus); // 清除等待响应的中断。 if(ulStatus & UART_INT_TX) // 检查是否有未响应的传输中断。 { while(g_ulCount && UARTSpaceAvail(UART0_BASE)) // 处理传输中断。 { UARTCharNonBlockingPut(UART0_BASE, *g_pucBuffer++); // 发送下一个字符。 g_ulCount--; // 发送字符数自减。 } } }
void UARTSend(const unsigned char *pucBuffer, unsigned long ulCount) // 发送数据处理函数 { while(g_ulCount); // 等待,直到之前的字符串发送完毕。 g_pucBuffer = pucBuffer; // 保存待传输的数据缓冲。 g_ulCount = ulCount; // 保存计数值。 // 当FIFO没有空间或g_ulCount==0时退出 while(UARTSpaceAvail(UART0_BASE)&&g_ulCount) // 处理传输中断。 { UARTCharNonBlockingPut(UART0_BASE, *g_pucBuffer++); // 发送下一个字符。 g_ulCount--; // 发送字符数自减。 } } /*******************************************************************************************************/ int main(void) { WaitJTAG(); Initial(); unsigned long ulData = 0; while(1) { ADCProcessorTrigger(ADC_BASE, 0); // 处理器触发采样序列0 while( (HWREG(ADC_BASE + ADC_O_X_SSFSTAT) & 0x00000100) ); // 等待FIFO 0为非空,即等待转换结束 ADCSequenceDataGet(ADC_BASE, 0, &ulData); // 读出10位转换结果 g_pucString[0]=ulData&0x000000ff; g_pucString[1]=ulData>>8; UARTSend(g_pucString, sizeof(g_pucString)); UARTDisable(UART0_BASE); UARTEnable(UART0_BASE); } } /*******************************************************************************************************/ |