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