Oleg_tv (28.09.2012 15:09, просмотров: 1) ответил Oleg_tv на После инициализации MT8889C по описанию производителя,она не желает выводить один символ. При этом прерывание генерируется.Вижу импульс на INT, но нет вывода DTMF.Для обхода этого я после инициализации вывожу два символа без прерываний и после еще
Если использовать MT8889C + Burst Mode Select + Interrupt Enable все работает замечательно. Но АТС не принимает вызов с автонабора.Я решил увеличить длительность сигнала и паузы. Нашел режим + CP.Установил его, но сигнал прерывания стал приходить несколько хаотически, я бы сказал. Бывает вообще отсутствует. Впечатлениечто это связано с инициализацией этой микросхемы после подачи питания.Дальше уточнять не буду т.к. это уже из области потустороннего ... :-)Инициализацию я ее делал почти как в описании. Почему "почти"я описал в предыдущем сообщении. /////////////////////////////////////////////////////////////// MT8889C_Read_Status_Register(); ucTmp_MT8889C = 0x00; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); ucTmp_MT8889C = 0x00; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); ucTmp_MT8889C = 0x08; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); ucTmp_MT8889C = 0x00; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); MT8889C_Read_Status_Register(); /////////////////////////////////////////////////////////////// ucTmp_MT8889C = 0; ucTmp_MT8889C |= DEF_BitMask_CRA_TOUT; ucTmp_MT8889C |= DEF_BitMask_CRA_CP__DTMF; ucTmp_MT8889C |= DEF_BitMask_CRA_RSEL; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); ucTmp_MT8889C = 0; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); ucTmp_MT8889C = 0; MT8889C_SwapData(); MT8889C_Write_to_Data_Register(ucTmp_MT8889C_1); delay_ms(300); ucTmp_MT8889C = 0; MT8889C_SwapData(); MT8889C_Write_to_Data_Register(ucTmp_MT8889C_1); delay_ms(300); /////////////////////////////////////////////////////////////// MT8889C_Read_Status_Register(); ucTmp_MT8889C = 0x00; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); ucTmp_MT8889C = 0x00; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); ucTmp_MT8889C = 0x08; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); ucTmp_MT8889C = 0x00; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); MT8889C_Read_Status_Register(); /////////////////////////////////////////////////////////////// Программирую режим ucTmp_MT8889C = 0; ucTmp_MT8889C |= DEF_BitMask_CRA_TOUT; ucTmp_MT8889C |= DEF_BitMask_CRA_IRQ; ucTmp_MT8889C |= DEF_BitMask_CRA_CP__DTMF; ucTmp_MT8889C |= DEF_BitMask_CRA_RSEL; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1); ucTmp_MT8889C = 0; MT8889C_SwapData(); MT8889C_Write_to_Control_Register(ucTmp_MT8889C_1);Запуск передачи ucTmp_MT8889C = ucPhone_numbers[ucCurPhone_number][ucCurFigPhone_number]; MT8889C_SwapData(); MT8889C_Write_to_Data_Register(ucTmp_MT8889C_1);В прерывании ucTmp_MT8889C = ucPhone_numbers[ucCurPhone_number][ucCurFigPhone_number]; MT8889C_SwapData(); MT8889C_Write_to_Data_Register(ucTmp_MT8889C_1); В общем кто с ней работал в этом режиме расскажите, что не так.