note: - модбас не моделируется, в s-function просто передаются константы режимов. - лишние файлы убраны в outdate. - два канала одной фазы переключаются немного криво: на один такт симуляции проскакивает высокий уровень предыдущего канала и только потом включается текущий канал
27 lines
570 B
C
27 lines
570 B
C
#include "ClockPackTransf.h"
|
|
extern TIM_HandleTypeDef htim1;
|
|
extern int TIM3_Period;
|
|
|
|
struct bus message;
|
|
|
|
void Trans_bus(void)
|
|
{
|
|
// transmit ADR and DATA
|
|
GPIOA->ODR = ((message.ADR.value<<9) | message.DATA.value);
|
|
|
|
// GPIOA->ODR |= message.DATA.value;
|
|
|
|
// changing ADR and DATA
|
|
message.ADR.value++;
|
|
if (message.ADR.value > 7) message.ADR.value = 1;
|
|
message.DATA.value++;
|
|
|
|
// wait yo pulse end and reset timer
|
|
while(TIM1->CNT < TIM3_Period-10);
|
|
TIM1->CR1 &= ~(1<<0);
|
|
TIM1->CNT = TIM3_Period-1;
|
|
// when pulse period is over clear ports
|
|
GPIOA->ODR = 0;
|
|
|
|
}
|