void uart_stm32_isr(void *context,alt_u32 id)//中断服务函数
{
//i1=0;
alt_u16 status9;
do
{
status9 = IORD_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE);//等待发送完成
}
while (!(status9& ALTERA_AVALON_UART_STATUS_RRDY_MSK));
read_temp[i2]=IORD_ALTERA_AVALON_UART_RXDATA(UART_TTL_BASE);//接收数据
if (read_temp[0]==0xFF)
{
i2=i2+1;
}
//read_temp[0]=IORD_ALTERA_AVALON_UART_RXDATA(UART_TTL_BASE);//接收数据
if (i2==5)
{
i2=0;
stm32_flag_RF=1;//接收完一组,标志置为1
}
IOWR_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE, 0);//清除接收缓冲区
}
void uart_send(unsigned char data)//uart发送单个字节
{
alt_u8 status;
status=IORD_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE);
while(!(status&0x40))
status=IORD_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE);//等待发送完成
IOWR_ALTERA_AVALON_UART_TXDATA(UART_TTL_BASE,data);
}
void uart_send_n(unsigned char *ptr,unsigned char n)//uart发送多个字节
{
for(;n>0;n++)
{
uart_send(*ptr);
ptr++;
}
}
void uart_stm32_init()//串口中断初始化
{
i2=0;
IOWR_ALTERA_AVALON_UART_CONTROL(UART_TTL_BASE,0x80);//接受中断使能
IOWR_ALTERA_AVALON_UART_STATUS(UART_TTL_BASE,0X00);//清状态标志
alt_u16 control11;
control11 =ALTERA_AVALON_UART_CONTROL_RRDY_MSK | ALTERA_AVALON_UART_CONTROL_E_MSK;
IOWR_ALTERA_AVALON_UART_CONTROL(UART_TTL_BASE, control11);
IOWR_ALTERA_AVALON_UART_DIVISOR(UART_422_BASE, 10416);
alt_irq_register(UART_TTL_IRQ,0,uart_stm32_isr);注册串口中断服务程序
}
void stm32_command_switch(void)//对读取到的数据进行处理
{
High=read_temp[1];
Low=read_temp[2];
Temp=(Low+High*256)/100;
test1=read_temp[3];
TEC_Flag=test1;
}