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;
 | 
						|
		
 | 
						|
}
 |