program torque_vfd_comm;
uses cortexm3, stm32f103fw;
const
TIM_CR1_CEN : uInt16 = $0001; // Counter enable
RCC_APB1ENR_TIM2EN : uInt32 = $00000001; // TIM2 clock enabled
TIM_DIER_CC1IE : uInt16 = $0002; // Capture / Compare 1 interrupt enable
TIM_SR_CC1IF : uInt16 = $0002; // Capture / Compare 1 interrupt flag
TIM2_IRQn = 28; // TIM2 global interrupt
systick_counter_enable = 1;
CTRL_TICKINT_Set = 2;
Systick_IRQn = -1;
RCC_CR_PLLON = $01000000;
RCC_CR_CSSON = $00080000;
RCC_CR_HSEON = $00010000;
RCC_CR_HSION = $00000001;
RCC_CFGR_USBPRE = $00400000;
RCC_CFGR_PLLMULL6 = $00100000;
RCC_CFGR_PLLSRC = $00010000;
RCC_CFGR_ADCPRE_DIV4 = $00004000;
RCC_CFGR_HPRE_DIV2 = $0000008;
RCC_CFGR_SWS_PLL = $00000008;
RCC_CFGR_SW_PLL = $00000002;
RCC_CR_HSERDY = $00020000;
RCC_CR_HSIRDY = $00000002;
RCC_CR_PLLRDY = $02000000;
USART_RE = $00000004;
USART_TE = $00000008;
USART_IDLEIE = $00000010;
USART_RXNEIE = $00000020;
USART_TCIE = $00000040;
USART_TXIE = $00000080;
USART_PEIE = $00000100;
USART_UE = $00002000;
USART_DMAT = $00000080;
USART_DMAR = $00000040;
Marcha_OUT = $0001;
Para_OUT = $0002;
Sentido_OUT = $0004;
Marcha_local = $0010;
Para_Local = $0020;
Sentido_Local = $0040;
Marcha_Remoto = $0100;
Para_Remoto = $0200;
Sentido_Remoto = $0400;
Remoto_Local = $8000; //1= remoto
Serial_buffer_size = 64;
{$O-}
Type
TLed = bitpacked array[0..15] of boolean;
var
PuertoA : TLed absolute PortA.ODR;
PuertoB : TLed absolute PortB.ODR;
PuertoC : TLed absolute PortC.ODR;
PuertoD : TLed absolute PortD.ODR;
LedC : TLed absolute PortC.ODR;
contador: word;
contador2,
contador3: word;
cuenta_max: word = 20;
subiendo: boolean = true;
PUsart: ^TUSARTRegisters;
PDMARegisters : ^LongWord;
RXBuffer1: Array [0..Serial_buffer_size-1] of byte;
TXBuffer1: Array [0..Serial_buffer_size-1] of byte;
RXBuffer2: Array [0..Serial_buffer_size-1] of byte;
TXBuffer2: Array [0..Serial_buffer_size-1] of byte;
RXBuffer3: Array [0..Serial_buffer_size-1] of byte;
TXBuffer3: Array [0..Serial_buffer_size-1] of byte;
ADC1Buffer: Array[0..4] of word;
RPM : word;
RPM_1,
RPM_2,
Presion_1,
Presion_2,
Temperatura_1,
Temperatura_2,
Caudal_1,
Caudal_2,
IO_Bits,
Contador_tick_segundos: word;
marca: Boolean;
i: Longword;
Usart_ini: TUSART_InitTypeDef;
NVIC_Ini: TNVIC_InitTypeDef;
ADC_Ini: TADC_InitTypeDef;
I2C_Ini: TI2CRegisters;
TIMER_Ini: TIM_TimeBaseInitTypeDef;
Timer_OC_INI: TIM_OCInitTypeDef;
Timer_IC_INI: TIM_ICInitTypeDef;
GPIOx: TPortRegisters;
GPIO_InitStruct: TGPIO_InitTypeDef;
DMAChannel: TDMAChannel;
DMA_InitTypeDef: TDMA_InitTypeDef;
DMARegisters: TDMARegisters;
tmpreg: longword;
RCC_Clocks: TRCC_ClocksTypeDef;
PByte: ^Byte;
AUX_B: Byte;
procedure SysTick_interrupt; public name 'SysTick_interrupt'; interrupt;
begin // 1 ms!!
inc (contador3);
If contador3 >= 100 then //0.1 s
begin
marca:= true;
contador3:= 0;
end;
end;
procedure Timer2_Interrupt; public name 'TIM2_global_interrupt'; interrupt;
begin
TIMER2.SR := TIMER2.SR and not TIM_SR_CC1IF; // Clear CC1IF
end;
procedure DMA1_Channel1_global_interrupt; public name 'DMA1_Channel1_global_interrupt'; interrupt;
Begin
dmaregisters.ifcr:= $0FFFFFFF;
end;
procedure DMA1_Channel2_global_interrupt; public name 'DMA1_Channel2_global_interrupt'; interrupt;
Begin
dmaregisters.ifcr:= $0FFFFFFF;
end;
procedure DMA1_Channel3_global_interrupt; public name 'DMA3_Channel1_global_interrupt'; interrupt;
Begin
dmaregisters.ifcr:= $0FFFFFFF;
end;
procedure DMA1_Channel4_global_interrupt; public name 'DMA4_Channel1_global_interrupt'; interrupt;
Begin
dmaregisters.ifcr:= $0FFFFFFF;
end;
procedure DMA1_Channel5_global_interrupt; public name 'DMA5_Channel1_global_interrupt'; interrupt;
Begin
dmaregisters.ifcr:= $0FFFFFFF;
end;
procedure DMA1_Channel6_global_interrupt; public name 'DMA6_Channel1_global_interrupt'; interrupt;
Begin
dmaregisters.ifcr:= $0FFFFFFF;
end;
procedure DMA1_Channel7_global_interrupt; public name 'DMA7_Channel1_global_interrupt'; interrupt;
Begin
dmaregisters.ifcr:= $0FFFFFFF;
end;
procedure ADC1_and_ADC2_global_interrupt; public name 'ADC1_and_ADC2_global_interrupt'; interrupt;
Begin
dmaregisters.ifcr:= $0FFFFFFF;
end;
begin
//************************************************
//**************** RCC *************************
//FLASH_SetLatency(1);
RCC_HSICmd(Enabled);
RCC_DeInit;
RCC_HSICmd(Enabled);
RCC_HSEConfig(RCC_HSE_On);
RCC_WaitForHSEStartUp;
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6); //48MHz
RCC_PLLCmd(Enabled);
while rcc.cr and RCC_CR_PLLRDY = 0 do
begin
//wait pll ready
end;
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2); //24MHz
RCC_PCLK2Config(RCC_HCLK_Div1); //48MHz
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while RCC_GetSYSCLKSource <> %1000 do //(RCC_SYSCLKSource_PLLCLK shl 2)
begin
//wait pll source
end;
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_DMA1 or RCC_AHBPeriph_DMA2 or RCC_AHBPeriph_SRAM or RCC_AHBPeriph_FLITF, Enabled);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ALL, Enabled);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, Disabled);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL, Enabled);
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 or RCC_APB1Periph_I2C2 or RCC_APB1Periph_CAN, Disabled);
RCC_ADCCLKConfig(RCC_HCLK_Div2); //12 MHz
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_Div1); //48MHz
RCC_ClockSecuritySystemCmd(Enabled);
RCC_GetClocksFreq(RCC_Clocks);
//************************************************
//**************** GPIO *************************
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_0; //RPM TIM2_1 input1
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_1; //RTS USART2
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_2; //TX USART2
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_3; //RX USART2
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_4; //ADC
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AIN;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_5; //ADC
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AIN;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_6; //ADC
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AIN;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_7; //ADC
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AIN;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_8;//para_local_in
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_9; //TX USART1
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_10; //RX USART1
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
//11 usb
//12 usb
//13 swdio
//14 swclk
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_15; //marcha_local_in
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortA, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_0; //ADC aux
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AIN;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_1; //rpm timer3_4
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_2;//BOOT1
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_3;//Sentido_local_in
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_4;//Marcha_OUT
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_5;//Para_OUT
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_6;//RPM TIMER4_1
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_7;//Sentido_OUT
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_PinRemapConfig(GPIO_Remap_I2C1, enabled);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_8;//I2C1 SCL
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AF_OD;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_9;//I2C1 SDA
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AF_OD;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_10; //TX USART3
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_11; //RX USART3
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_12;//Aux_OUT
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_13; //PWM OUT 1
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_14; //PWM OUT 2
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_15; //PWM OUT 3
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortB, GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin:= GPIO_Pin_13; //led interno
GPIO_InitStruct.GPIO_Mode:= GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed:= GPIO_Speed_2MHz;
GPIO_Init(PortC, GPIO_InitStruct);
//************************************************
//**************** USART *************************
Usart_ini.USART_BaudRate:= 9600;
Usart_ini.USART_WordLength:= USART_WordLength_8b;
Usart_ini.USART_StopBits:= USART_StopBits_1;
Usart_ini.USART_Parity:= USART_Parity_No ;
Usart_ini.USART_Mode:= USART_Mode_Rx or USART_Mode_Tx;
Usart_ini.USART_HardwareFlowControl:= USART_HardwareFlowControl_None;
Usart_ini.USART_Clock:= USART_Clock_Disable;
Usart_ini.USART_CPOL:= USART_CPOL_Low;
Usart_ini.USART_CPHA:= USART_CPHA_1Edge;
Usart_ini.USART_LastBit:= USART_LastBit_Disable;
USART_Init(USart1, Usart_ini);
USART_Init(USart3, Usart_ini);
Usart_ini.USART_HardwareFlowControl:= USART_HardwareFlowControl_RTS;
USART_Init(USart2, Usart_ini);
USART_DMACmd(Usart1,USART_DMAReq_Tx or USART_DMAReq_Rx ,Enabled);
USART_DMACmd(Usart2,USART_DMAReq_Tx or USART_DMAReq_Rx ,Enabled);
USART_DMACmd(Usart3,USART_DMAReq_Tx or USART_DMAReq_Rx ,Enabled);
USART_ITConfig(Usart1, USART_IT_TC , enabled);
USART_ITConfig(Usart2, USART_IT_TC , enabled);
USART_ITConfig(Usart3, USART_IT_TC , enabled);
Usart_Cmd(Usart1, ENABLED);
Usart_Cmd(Usart2, ENABLED);
Usart_Cmd(Usart3, ENABLED);
//************************************************
//**************** NVIC **************************
NVIC_Ini.NVIC_IRQChannelPreemptionPriority:= 0;
NVIC_Ini.NVIC_IRQChannelSubPriority:= 0;
NVIC_Ini.NVIC_IRQChannel:= DMAChannel1_IRQChannel;
NVIC_Init(NVIC_Ini);
NVIC_Ini.NVIC_IRQChannel:= DMAChannel2_IRQChannel;
NVIC_Init(NVIC_Ini);
NVIC_Ini.NVIC_IRQChannel:= DMAChannel3_IRQChannel;
NVIC_Init(NVIC_Ini);
NVIC_Ini.NVIC_IRQChannel:= DMAChannel4_IRQChannel;
NVIC_Init(NVIC_Ini);
NVIC_Ini.NVIC_IRQChannel:= DMAChannel5_IRQChannel;
NVIC_Init(NVIC_Ini);
NVIC_Ini.NVIC_IRQChannel:= DMAChannel6_IRQChannel;
NVIC_Init(NVIC_Ini);
NVIC_Ini.NVIC_IRQChannel:= DMAChannel7_IRQChannel;
NVIC_Init(NVIC_Ini);
NVIC_Ini.NVIC_IRQChannelCmd:= Enabled;
//***************************************************
//******************** Systick **********************
Systick.LOAD:= 6000; // 1ms main loop
SysTick.CTRL := SysTick.CTRL or CTRL_TICKINT_Set AND (not 4);// interrupt, AHB/8
SysTick.CTRL := SysTick.CTRL or systick_counter_enable ; //enabled
contador:= cuenta_max - 2;
TXBuffer1[0]:= byte('h');
TXBuffer1[1]:= byte('e');
TXBuffer1[2]:= byte('l');
TXBuffer1[3]:= byte('l');
TXBuffer1[4]:= byte('o');
tmpreg:= longWord(@DMA1.Channel[2].CCR);
AUX_B:= Byte((tmpreg AND $000000FF));
TXBuffer1[5]:= AUX_B;
AUX_B:= Byte((tmpreg AND $0000FF00) shr 8);
TXBuffer1[6]:= AUX_B;
AUX_B:= Byte((tmpreg AND $00FF0000) shr 16);
TXBuffer1[7]:= AUX_B;
AUX_B:= Byte((tmpreg AND $FF000000) shr 24);
TXBuffer1[8]:= AUX_B;
tmpreg:= longWord(@DMA1.Channel[2].res1);
AUX_B:= Byte((tmpreg AND $000000FF));
TXBuffer1[9]:= AUX_B;
AUX_B:= Byte((tmpreg AND $0000FF00) shr 8);
TXBuffer1[10]:= AUX_B;
AUX_B:= Byte((tmpreg AND $00FF0000) shr 16);
TXBuffer1[11]:= AUX_B;
AUX_B:= Byte((tmpreg AND $FF000000) shr 24);
TXBuffer1[12]:= AUX_B;
tmpreg:= longWord(@DMA1.Channel[2].CNDTR);
AUX_B:= Byte((tmpreg AND $000000FF));
TXBuffer1[13]:= AUX_B;
AUX_B:= Byte((tmpreg AND $0000FF00) shr 8);
TXBuffer1[14]:= AUX_B;
AUX_B:= Byte((tmpreg AND $00FF0000) shr 16);
TXBuffer1[15]:= AUX_B;
AUX_B:= Byte((tmpreg AND $FF000000) shr 24);
TXBuffer1[16]:= AUX_B;
tmpreg:= longWord(@DMA1.Channel[2].res2);
AUX_B:= Byte((tmpreg AND $000000FF));
TXBuffer1[17]:= AUX_B;
AUX_B:= Byte((tmpreg AND $0000FF00) shr 8);
TXBuffer1[18]:= AUX_B;
AUX_B:= Byte((tmpreg AND $00FF0000) shr 16);
TXBuffer1[19]:= AUX_B;
AUX_B:= Byte((tmpreg AND $FF000000) shr 24);
TXBuffer1[20]:= AUX_B;
PDMARegisters := @DMA1 + $44; //CCR4
PDMARegisters^:= %000000010110110;
PDMARegisters := @DMA1 + $48; //CNDTR4
PDMARegisters^:= 22;
PDMARegisters := @DMA1 + $4C; //CPAR4
PDMARegisters^:= LongWord(@Usart1.DR);
PDMARegisters := @DMA1 + $50; //CMAR4
PDMARegisters^:= LongWord(@TXBuffer1);
Usart1.SR:= Usart1.SR and not %1000000;
PDMARegisters := @DMA1 + $44; //CCR4
PDMARegisters^:= PDMARegisters^ or %1; //enable
PDMARegisters := @DMA1 + $80; //CCR7
PDMARegisters^:= %000000010110110;
PDMARegisters := @DMA1 + $84; //CNDTR7
PDMARegisters^:= 5;
PDMARegisters := @DMA1 + $88; //CPAR7
PDMARegisters^:= LongWord(@Usart2.DR);
PDMARegisters := @DMA1 + $8c; //CMAR7
PDMARegisters^:= LongWord(@TXBuffer2);
Usart2.SR:= Usart2.SR and not %1000000;
PDMARegisters := @DMA1 + $80; //CCR7
PDMARegisters^:= PDMARegisters^ or %1; //enable
PDMARegisters := @DMA1 + $1C; //CCR2
PDMARegisters^:= %000000010110110;
PDMARegisters := @DMA1 + $20; //CNDTR2
PDMARegisters^:= 5;
PDMARegisters := @DMA1 + $24; //CPAR2
PDMARegisters^:= LongWord(@Usart3.DR);
PDMARegisters := @DMA1 + $28; //CMAR2
PDMARegisters^:= LongWord(@TXBuffer3);
Usart3.SR:= Usart3.SR and not %1000000;
PDMARegisters := @DMA1 + $1C; //CCR2
PDMARegisters^:= PDMARegisters^ or %1; //enable
while true do
begin
//RPM:= 60000 div Usart2.BRR;
If marca then
begin
marca:= False;
Inc(Contador);
Inc(Contador_tick_Segundos);
If Contador_tick_segundos >= 10 then
begin
Contador_tick_segundos:= 0;
PuertoB[4]:= Not PuertoB[4];
PuertoB[5]:= Not PuertoB[5];
PuertoB[7]:= Not PuertoB[7];
end;
//if contador and 01 = 0 then LedC[13] := not LedC[13] else LedC[13] := true;
if contador <= contador2 then LedC[13] := not LedC[13] else LedC[13] := true;
if contador >= cuenta_Max then
begin
contador := 0;
if subiendo then contador2 += 2 else contador2 -= 2;
if contador2 > Cuenta_max then subiendo:= false;
if contador2 = 0 then subiendo:= true;
end;
end;
end;
end.