⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo_int.c

📁 南京沁恒电子有限公司USB通用设备接口芯片资料
💻 C
📖 第 1 页 / 共 2 页
字号:
            break;
        }
        else
        {
            WriteCH432Block( CH432_THR1_PORT, 16, Data );
            Num -= 16;
            Data += 16;
        }
    }
}

void Auto_HandFlow0_Ctrl( )    /* 串口0自动硬件流控制 */
{
    WriteCH432Data( CH432_MCR_PORT, BIT_MCR_AFE | BIT_MCR_OUT2 | BIT_MCR_RTS );    /* 设置MCR寄存器的AFE和RTS为1 */
}

void Auto_HandFlow1_Ctrl( )     /* 串口1自动硬件流控制*/
{
    WriteCH432Data( CH432_MCR1_PORT, BIT_MCR_AFE | BIT_MCR_OUT2 | BIT_MCR_RTS );    /* 设置MCR1寄存器的AFE和RTS为1 */
}

UINT8 Modem_Ctrl()    /* Modem发送接收数据子程序 */
{
    UINT8 ModemStatus;
    UINT8 s;
    UINT8 InterruptStatus;
    while( 1 )
    {
        InterruptStatus = ReadCH432Data( CH432_IIR_PORT ) & ( ~ CH432_IIR_FIFOS_ENABLED );;
        if( ( InterruptStatus & 0x01 ) ) continue;
        else
        {
            ModemStatus = ReadCH432Data( CH432_MSR_PORT );
            WriteCH432Data( CH432_THR_PORT, ModemStatus );
            if ( ModemStatus == 0x30 )    /* Modem信号发送数据变化 */
            {
                UART0_SendStr( SEND_STRING );
            }
            else if ( ModemStatus == 0x11 )    /* Modem 信号接收数据变化 */
            {
                WriteCH432Data( CH432_THR_PORT, 0xAA );
            }
            else if ( ModemStatus == 0x22 )    /* Modem 信号接收数据变化 */
            {
                s = ReadCH432Data( CH432_RBR_PORT );
                WriteCH432Data( CH432_THR_PORT, s );
            }
        }
    }
    return( ModemStatus );
}

void EnableTransEmptyIf( void )	/* 恢复串口发送完成中断,以便强行进入发送完成的中断服务程序 */
{
	UINT8	OldIE;
	OldIE = ReadCH432Data( CH432_IER_PORT );  /* 原IE */
	WriteCH432Data( CH432_IER_PORT, OldIE & (UINT8)~ BIT_IER_IETHRE );  /* 临时关闭发送完成中断 */
	WriteCH432Data( CH432_IER_PORT, OldIE );  /* 重新开启发送完成中断 */
}

void mInitSTDIO( )    /* 初始化单片机串口 用于查看寄存器值 */
{
    SCON = 0x50;
    PCON = 0x80;
    TMOD = 0x20;
    TH1 = 0xf3;  /* 24MHz晶振, 9600bps */
    TR1 = 1;
    TI = 1;
}

void CH432Interrupt( ) interrupt 2    /* 中断方式处理 */
{
    UINT8 InterruptStatus;
    UINT8 RcvNum = 0, s;
    UINT8 ModemStatus;
    InterruptStatus = ReadCH432Data( CH432_IIR_PORT ) & ( ~ CH432_IIR_FIFOS_ENABLED );
    if( ( InterruptStatus & 0x01 ) )    /* 没有中断转到串口1 */
    {
        InterruptStatus = ReadCH432Data( CH432_IIR1_PORT ) & ( ~ CH432_IIR_FIFOS_ENABLED );    /* 读串口1的中断状态 */
        if( ( InterruptStatus & 0x01 ) ) return;    /* 没有中断退出 */
        else
        {
            switch( InterruptStatus )
            {
                case INT_NOINT:    /* 没有中断 */
                    break;
                case INT_THR_EMPTY:    /* 发送保持寄存器空中断 */
                    UART1_SendStr( SEND_STRING1 );
                    break;
                case INT_RCV_SUCCESS:    /* 串口接收可用数据中断 */
                    RcvNum = CH432Seril1Rcv( buf );
                    CH432Seril1Send( buf, RcvNum );
                    break;
                case INT_RCV_LINES:    /* 接收线路状态中断 */
                    ReadCH432Data( CH432_LSR1_PORT);
                    break;
                case INT_RCV_OVERTIME:    /* 接收数据超时中断 */
                    RcvNum = CH432Seril1Rcv( buf );
                    CH432Seril1Send( buf, RcvNum );
                    break;
                default:    /* 不可能发生的中断 */
                    break;
            }
        }
    }
    else
    {
        switch( InterruptStatus )
        {
            case INT_MODEM_CHANGE:
                ModemStatus = ReadCH432Data( CH432_MSR_PORT );
                WriteCH432Data( CH432_THR_PORT, ModemStatus );
                UART0_SendStr( SEND_STRING1 );
                if ( ModemStatus == 0x30 )    /* Modem信号发送数据变化 */
                {
                    UART0_SendStr( SEND_STRING1 );
                }
                else if ( ModemStatus == 0x11 )    /* Modem 信号接收数据变化 */
                {
                    WriteCH432Data( CH432_THR_PORT, 0xAA );
                }
                else if ( ModemStatus == 0x22 )    /* Modem 信号接收数据变化 */
                {
                    s = ReadCH432Data( CH432_RBR_PORT );
                    WriteCH432Data( CH432_THR_PORT, s );
                }
                break;
            case INT_NOINT:    /* 没有中断 */
                    break;
            case INT_THR_EMPTY:    /* 发送保持寄存器空中断 */
                    UART0_SendStr( SEND_STRING );
                    break;
            case INT_RCV_SUCCESS:    /* 串口接收可用数据中断 */
                    RcvNum = CH432Seril0Rcv( buf );
                    UART0_SendByte( RcvNum );
                    CH432Seril0Send( buf, RcvNum );
                    break;
            case INT_RCV_LINES:    /* 接收线路状态中断 */
                    ReadCH432Data( CH432_LSR_PORT);
                    break;
            case INT_RCV_OVERTIME:    /* 接收数据超时中断 */
                    RcvNum = CH432Seril0Rcv( buf );
                    UART0_SendByte( RcvNum );
                    CH432Seril0Send( buf, RcvNum );
                    break;
            default:    /* 不可能发生的中断 */
                    break;
        }
    }
}

main()
{
    UINT8 i, Status;
    UINT8 s = 0;
    CH432_PORT_INIT();
    #if 0
    mInitSTDIO( );    /* 测试CH432与单片机硬件正确连接 */
    Status = ReadCH432Data( CH432_IER_PORT );
    printf( "%02X\n", Status );
    Status = ReadCH432Data( CH432_IIR1_PORT );
    printf( "%02X\n", Status );
    Status = ReadCH432Data( CH432_IIR_PORT );
    printf( "%02X\n", Status );
    Status = ReadCH432Data( CH432_FCR_PORT );
    printf( "%02X\n", Status );
    Status = ReadCH432Data( CH432_MCR_PORT );
    printf( "%02X\n", Status );
    Status = ReadCH432Data( CH432_LSR_PORT );
    printf( "%02X\n", Status );
    Status = ReadCH432Data( CH432_MSR_PORT );
    printf( "%02X\n", Status );
    #endif
    
    InitCH432( );
    
    #if 0
    UART0_SendByte( 0xAA );
    UART1_SendByte( 0xBB );
    for( i = 0; i < 50; i++ )
    {
        buf[ i ] = 0xAA + i;
    }
    CH432UART0Send( buf, 50 );
    CH432UART1Send( buf, 50 );
    #endif
    
    #if 0
    Auto_HandFlow0_Ctrl( );
    Auto_HandFlow1_Ctrl( );
    #endif

    #if 0
    Modem_Ctrl() ;
    #endif

    #if 0
    s = CH432Seril0Rcv( buf );
    WriteCH432Data( CH432_THR_PORT, s );
    CH432Seril0Send( buf, s );
    #endif
    
    IE1=0;
    EX1=1;
    EA=1;
    while( 1 );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -