eldarkg / emdr1986x-std-per-lib

Milandr MCU 1986x Standard Peripherals Library. Mirror:

Home Page:https://code.launchpad.net/~eldar/emdr1986x-std-per-lib/+git/emdr1986x-std-per-lib

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ошибка в коде MDR32F9Qx_mil_std_1553.c функция MIL_STD_1553_Cmd

nw53harry opened this issue · comments

Функция должна сбрасывать и устанавливать бит MR но устанавливает еще несколько старших бит,
и сбивает раннее сделаные настройки (ошибка из за неправильгого значения MR_EN_Reset),
предлагается такой вариант:

void MIL_STD_1553_Cmd(MDR_MIL_STD_1553_TypeDef * MIL_STD_1553x, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_MIL_STD_1553_ALL_PERIPH(MIL_STD_1553x));
assert_param(IS_FUNCTIONAL_STATE(NewState));

if(NewState == ENABLE){
	/* Enable the selected MIL_STD_1553 by clearingsetting the MR bit in the CONTROL register */
	MIL_STD_1553x->CONTROL &= ~MR_EN_Set;
}
else{
	/* Disable the selected MIL_STD_1553 by setting the MR bit in the CONTROL register */
	MIL_STD_1553x->CONTROL |= MR_EN_Set; // setting only the MR bit in the CONTROL register
	//MIL_STD_1553x->CONTROL |= ~MR_EN_Reset; // it is wrong, unnecessary high bits are set! (оставил ошибку для сравнения)
}

}

Уже не поддерживаю данный репозиторий, но могу слить ваши изменения (под вашу ответственность), если откроете Pull request