|
|
@@ -71,43 +71,6 @@ static const uint8_t dscrc_table[] = {
|
|
|
//--------------------------------------------------------------------------
|
|
|
// Implementacia low-level funkcii pre STM32
|
|
|
//--------------------------------------------------------------------------
|
|
|
-#ifdef OW_MODULE_USE_TIMER
|
|
|
-void delay_us(uint16_t time) {
|
|
|
-
|
|
|
- time -= 3;
|
|
|
- oneWireDrv.owTimer->Instance->CNT=0;
|
|
|
- HAL_TIM_Base_Start(oneWireDrv.owTimer);
|
|
|
- while(oneWireDrv.owTimer->Instance->CNT < time);
|
|
|
- HAL_TIM_Base_Stop(oneWireDrv.owTimer);
|
|
|
-}
|
|
|
-
|
|
|
-void delay_us_long(uint16_t time){
|
|
|
- delay_us(time);
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
-/**
|
|
|
-* Zruší stav STRONG na zbernici 1-wire.
|
|
|
-*/
|
|
|
-inline void ow_ClearStrong(){
|
|
|
-// OW_STRONG_CLEAR;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
-* Zbenicu 1-wire nastaví do stavu STRONG (silná hodtnota "1").
|
|
|
-*/
|
|
|
-inline void ow_SetStrong(void) {
|
|
|
-// OW_STRONG_SET;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-/**
|
|
|
-* Zbenicu 1-wire nastaví do stavu, kedy je možné zo zbenice čítať hodnoty.
|
|
|
-*/
|
|
|
-static inline void ow_SetReadState(void) {
|
|
|
-// OW_UP_CLEAR;
|
|
|
-// OW_DOWN_CLEAR;
|
|
|
-}
|
|
|
|
|
|
/**
|
|
|
* Nastavi pin pre 1W ako vstupný.
|
|
|
@@ -115,8 +78,6 @@ static inline void ow_SetReadState(void) {
|
|
|
* Opis registrov: http://www.hertaville.com/stm32f0-gpio-tutorial-part-1.html
|
|
|
*/
|
|
|
__attribute__((optimize("O1"))) static void setPinIn(){
|
|
|
-#if OW_USE_2_WIRE == 0
|
|
|
-
|
|
|
#ifdef STM32F0
|
|
|
#define PIN_IN_USE_IN
|
|
|
uint32_t temp = oneWirePins.port->MODER;
|
|
|
@@ -134,12 +95,8 @@ __attribute__((optimize("O1"))) static void setPinIn(){
|
|
|
#endif // STM32L0
|
|
|
|
|
|
#ifndef PIN_IN_USE_IN
|
|
|
- #error MUSITE POUZIT VERIZU 1-WIRE PRE 2 PINY PROCESORA
|
|
|
- //GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
|
|
|
- //HAL_GPIO_Init(oneWirePins.port, &GPIO_InitStructure);
|
|
|
+ #error aktualne MCU nie je podporovane
|
|
|
#endif // PIN_IN_USE_IN
|
|
|
-
|
|
|
-#endif // OW_USE_2_WIRE
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -148,8 +105,6 @@ __attribute__((optimize("O1"))) static void setPinIn(){
|
|
|
* Opis registrov: http://www.hertaville.com/stm32f0-gpio-tutorial-part-1.html
|
|
|
*/
|
|
|
__attribute__((optimize("O1"))) static void setPinOut() {
|
|
|
-#if OW_USE_2_WIRE == 0
|
|
|
-
|
|
|
#ifdef STM32F0
|
|
|
#define PIN_IN_USE_IN
|
|
|
uint32_t temp = oneWirePins.port->MODER;
|
|
|
@@ -167,12 +122,8 @@ __attribute__((optimize("O1"))) static void setPinOut() {
|
|
|
#endif // STM32L0
|
|
|
|
|
|
#ifndef PIN_IN_USE_IN
|
|
|
- //GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
|
|
|
- //HAL_GPIO_Init(oneWirePins.port, &GPIO_InitStructure);
|
|
|
- #error MUSITE POUZIT VERIZU 1-WIRE PRE 2 PINY PROCESORA
|
|
|
+ #error aktualne MCU nie je podporovane
|
|
|
#endif // STM32F0
|
|
|
-
|
|
|
-#endif // OW_USE_2_WIRE
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -182,29 +133,16 @@ __attribute__((optimize("O1"))) static void setPinOut() {
|
|
|
|
|
|
/**
|
|
|
* @brief Inicializacia drivera zbernice 1-wire
|
|
|
- * Driver podporuje komunikáciu na 1-wire zbenici v implementácii 2 pinov (1xvstup, 1xvystup pin),
|
|
|
- * alebo 1 pinu (pin je podľa potreby zmenený). V aktuálnej verzii nie je podpora boostera zbernice.
|
|
|
- * Toto nastavenie je dané v súbore module_one_wire.h konštantou OW_USE_2_WIRE
|
|
|
* - Nastavia sa časové konštanty na preddefinované hodnoty.
|
|
|
* - Nastavia sa piny pre zbernicu One-wire
|
|
|
*
|
|
|
* @param timer časovač použirý an generovanie:
|
|
|
* - blokujúcej pauzy v ráde us
|
|
|
* @param GPIOx port pre piny
|
|
|
- * @param GPIO_Pin pin pre zápis na zbernicu (defined OW_USE_2_WIRE), alebo zápis/čítanie (NOT defined OW_USE_2_WIRE)
|
|
|
- * @param GPIO_Pin_in pin pre čítanie na zbernicu (defined OW_USE_2_WIRE)
|
|
|
+ * @param GPIO_Pin pin pre zápis na zbernicu pre zápis/čítanie
|
|
|
* @return none
|
|
|
*/
|
|
|
-#ifdef OW_MODULE_USE_TIMER
|
|
|
-void oneWire_init(TIM_HandleTypeDef *timer, GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) {
|
|
|
- oneWireDrv.owTimer = timer;
|
|
|
-#else
|
|
|
-#if OW_USE_2_WIRE == 1
|
|
|
-void oneWire_init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint16_t GPIO_Pin_in ) {
|
|
|
-#else
|
|
|
void oneWire_init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin ) {
|
|
|
-#endif
|
|
|
-#endif
|
|
|
oneWireDrv.one_wire_timing_settings = OW_SETTING_NORMAL;
|
|
|
oneWirePins.port = GPIOx;
|
|
|
oneWirePins.pin_ow = GPIO_Pin;
|
|
|
@@ -218,15 +156,10 @@ void oneWire_init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin ) {
|
|
|
oneWirePins.pin_ow_moder_bit--;
|
|
|
oneWirePins.pin_ow_moder_bit*=2;
|
|
|
|
|
|
-#if OW_USE_2_WIRE == 1
|
|
|
- oneWirePins.pin_ow_in = GPIO_Pin_in;
|
|
|
-#endif // OW_USE_2_WIRE
|
|
|
-
|
|
|
setPinOut();
|
|
|
OW_SET_HI;
|
|
|
*(oneWireDrv.ROM_NO) = (uint32_t)0;
|
|
|
*(oneWireDrv.ROM_NO+4) = (uint32_t)0;
|
|
|
- // delay_us_long(120);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -368,11 +301,7 @@ uint8_t owSearch() {
|
|
|
oneWireDrv.ROM_NO[rom_byte_number] &= ~rom_byte_mask;
|
|
|
|
|
|
// serial number search direction write bit
|
|
|
-#ifdef OW_USE_TICKS
|
|
|
owWriteBit(&search_direction);
|
|
|
-#else
|
|
|
- owWriteBit(search_direction);
|
|
|
-#endif
|
|
|
// increment the byte counter id_bit_number
|
|
|
// and shift the mask rom_byte_mask
|
|
|
id_bit_number++;
|
|
|
@@ -529,46 +458,19 @@ uint8_t owCrc8(uint8_t value) {
|
|
|
*/
|
|
|
uint8_t __attribute__((optimize("O3"))) owReset(void) {
|
|
|
uint8_t state;
|
|
|
-#ifdef OW_USE_TICKS
|
|
|
OW_GPIO_PULSE(OW_RESET_MEASTER, 0, MCU_FREQUENCY, 1, oneWirePins.port, oneWirePins.pin_ow);
|
|
|
|
|
|
OW_SET_HI;
|
|
|
setPinIn();
|
|
|
OW_DELAY_US(OW_RESET_PRESENCE, MCU_FREQUENCY, 1); //TODO set offset
|
|
|
|
|
|
-#if OW_USE_2_WIRE == 1
|
|
|
- state = (oneWirePins.port->IDR & oneWirePins.pin_ow_in ) != 0;
|
|
|
-#else
|
|
|
state = (oneWirePins.port->IDR & oneWirePins.pin_ow ) != 0;
|
|
|
-#endif //OW_USE_2_WIRE
|
|
|
|
|
|
//setPinOut();
|
|
|
OW_DELAY_US(OW_RESET_DELAY, MCU_FREQUENCY, 40); //TODO set offset
|
|
|
setPinOut(); //Toto som presunul až za oneskorenie, pretože to spôsobovalo nechcené pulzy
|
|
|
|
|
|
return !state;
|
|
|
-#else
|
|
|
- OW_SET_LO;
|
|
|
- delay_us_long(OW_RESET_MEASTER/4);
|
|
|
- OW_SET_HI;
|
|
|
-
|
|
|
- setPinIn();
|
|
|
- delay_us(OW_RESET_PRESENCE);
|
|
|
-
|
|
|
-#if OW_USE_2_WIRE == 1
|
|
|
- state = (oneWirePins.port->IDR & oneWirePins.pin_ow_in ) != 0 ? 1:0;
|
|
|
-#else
|
|
|
- state = (oneWirePins.port->IDR & oneWirePins.pin_ow ) != 0 ? 1:0;
|
|
|
-#endif //OW_USE_2_WIRE
|
|
|
-
|
|
|
- setPinOut();
|
|
|
- delay_us_long(OW_RESET_DELAY/4);
|
|
|
-
|
|
|
- if(state == GPIO_PIN_SET)
|
|
|
- return FALSE;
|
|
|
- else
|
|
|
- return TRUE;
|
|
|
-#endif
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -579,7 +481,6 @@ uint8_t __attribute__((optimize("O3"))) owReset(void) {
|
|
|
* @arg OW_STRONG_ON zbernica bude v stave STRONG
|
|
|
* @retval : none
|
|
|
*/
|
|
|
-#ifdef OW_USE_TICKS
|
|
|
void __attribute__((optimize("O1"))) owWriteByte(uint8_t byte_value, uint8_t strong) {
|
|
|
owWriteBit(&byte_value);
|
|
|
owWriteBit(&byte_value);
|
|
|
@@ -621,35 +522,12 @@ void __attribute__((optimize("O1"))) owWriteByte(uint8_t byte_value, uint8_t str
|
|
|
}
|
|
|
#endif
|
|
|
}
|
|
|
-#else
|
|
|
-void owWriteByte(uint8_t byte_value, uint8_t strong) {
|
|
|
- // HAL_SuspendTick();
|
|
|
- owWriteBit(byte_value);
|
|
|
- owWriteBit(byte_value>>1);
|
|
|
- owWriteBit(byte_value>>2);
|
|
|
- owWriteBit(byte_value>>3);
|
|
|
- owWriteBit(byte_value>>4);
|
|
|
- owWriteBit(byte_value>>5);
|
|
|
- owWriteBit(byte_value>>6);
|
|
|
- #if USE_STRONG == 1
|
|
|
- if(strong == OW_STRONG_ON){
|
|
|
- owWriteBitStrong(byte_value>>7);
|
|
|
- }else{
|
|
|
- owWriteBit(byte_value>>7);
|
|
|
- }
|
|
|
- #else
|
|
|
- owWriteBit(byte_value>>7);
|
|
|
- // HAL_ResumeTick();
|
|
|
- #endif
|
|
|
-}
|
|
|
-#endif
|
|
|
|
|
|
/**
|
|
|
* Na zbernicu 1-wire zapíše 1 bit. Po zápise nastaví zbernicu
|
|
|
* do stavu STRONG.
|
|
|
* @param bit_value - bit, ktorý sa bude zapisovať.
|
|
|
*/
|
|
|
-#ifdef OW_USE_TICKS
|
|
|
void owWriteBitStrong(uint8_t bit_value) {
|
|
|
if(bit_value & 0x01){
|
|
|
// zapis bit=1
|
|
|
@@ -662,24 +540,6 @@ void owWriteBitStrong(uint8_t bit_value) {
|
|
|
//TODO offset je stanovený od oka v tomto prípade
|
|
|
}
|
|
|
}
|
|
|
-#else
|
|
|
-void owWriteBitStrong(uint8_t bit_value) {
|
|
|
- OW_SET_LO;
|
|
|
- switch(bit_value & 0x01) {
|
|
|
- case 0x00:
|
|
|
- // zapis bit=0
|
|
|
- delay_us(OW_WRITE_ZERO);
|
|
|
- break;
|
|
|
-
|
|
|
- case 0x01:
|
|
|
- // zapis bit=1
|
|
|
- delay_us(OW_WRITE_ONE);
|
|
|
- break;
|
|
|
- }
|
|
|
- ow_SetReadState();
|
|
|
- // OW_STRONG_SET;
|
|
|
-}
|
|
|
-#endif
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -687,7 +547,6 @@ void owWriteBitStrong(uint8_t bit_value) {
|
|
|
* @param data, akceptovany je LSB
|
|
|
* @retval : none
|
|
|
*/
|
|
|
-#ifdef OW_USE_TICKS
|
|
|
void __attribute__((optimize("Ofast"))) owWriteBit(uint8_t* bit_value) {
|
|
|
if(*bit_value & 0x01){
|
|
|
// zapis bit=1
|
|
|
@@ -703,31 +562,6 @@ void __attribute__((optimize("Ofast"))) owWriteBit(uint8_t* bit_value) {
|
|
|
}
|
|
|
*bit_value >>= 1;
|
|
|
}
|
|
|
-#else
|
|
|
-void owWriteBit(uint8_t bit_value) {
|
|
|
- OW_SET_LO;
|
|
|
- //uint32_t prim = __get_PRIMASK();
|
|
|
- //__disable_irq();
|
|
|
-
|
|
|
- if(bit_value & 0x01) {
|
|
|
- // zapis bit=1
|
|
|
- delay_us(OW_WRITE_ONE);
|
|
|
- OW_SET_HI;
|
|
|
- delay_us(OW_WRITE_ONE_DELAY);
|
|
|
- }else{
|
|
|
- // zapis bit=0
|
|
|
- delay_us(OW_WRITE_ZERO);
|
|
|
- OW_SET_HI;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- delay_us(OW_WRITE_DELAY);
|
|
|
- // if (!prim) {
|
|
|
- // __enable_irq();
|
|
|
- //}
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -736,12 +570,7 @@ void owWriteBit(uint8_t bit_value) {
|
|
|
* @retval : nacitana hodnota 0/1
|
|
|
*/
|
|
|
uint8_t owReadBit(void) {
|
|
|
-#ifdef OW_USE_TICKS
|
|
|
- //uint32_t prim = __get_PRIMASK();
|
|
|
- //__disable_irq();
|
|
|
- //HAL_SuspendTick();
|
|
|
uint8_t state=0x00;
|
|
|
-
|
|
|
OW_GPIO_PULSE(OW_READ_PULSE, 0, MCU_FREQUENCY, 7, oneWirePins.port, oneWirePins.pin_ow); //TODO set offset
|
|
|
|
|
|
//OW_SET_HI;
|
|
|
@@ -749,58 +578,15 @@ uint8_t owReadBit(void) {
|
|
|
OW_SET_HI; //Toto som presunul až za oneskorenie, pretože to spôsobovalo nechcené pulzy
|
|
|
OW_DELAY_US(OW_READ_PRESENCE, MCU_FREQUENCY, 1); //TODO set offset
|
|
|
|
|
|
-#if OW_USE_2_WIRE == 1
|
|
|
- state = (oneWirePins.port->IDR & oneWirePins.pin_ow_in ) != 0;
|
|
|
-#else
|
|
|
state = (oneWirePins.port->IDR & oneWirePins.pin_ow ) != 0;
|
|
|
-#endif //OW_USE_2_WIRE
|
|
|
|
|
|
//setPinOut();
|
|
|
//OW_SET_HI;
|
|
|
OW_DELAY_US(OW_READ_DELAY, MCU_FREQUENCY, 1); //TODO set offset
|
|
|
setPinOut(); //Toto som presunul až za oneskorenie, pretože to spôsobovalo nechcené pulzy
|
|
|
OW_DELAY_US(OW_BOOSTER, MCU_FREQUENCY, 36); //TODO set offset
|
|
|
- /*
|
|
|
- if (!prim) {
|
|
|
- __enable_irq();
|
|
|
- }
|
|
|
- */
|
|
|
-// HAL_ResumeTick();
|
|
|
- return state;
|
|
|
-
|
|
|
-#else
|
|
|
- //uint32_t prim = __get_PRIMASK();
|
|
|
- //__disable_irq();
|
|
|
- //HAL_SuspendTick();
|
|
|
- uint8_t state=0x00;
|
|
|
-
|
|
|
-
|
|
|
- OW_SET_LO;
|
|
|
- delay_us(OW_READ_PULSE);
|
|
|
-
|
|
|
- OW_SET_HI;
|
|
|
- setPinIn();
|
|
|
- delay_us(OW_READ_PRESENCE);
|
|
|
|
|
|
-#if OW_USE_2_WIRE == 1
|
|
|
- state = (oneWirePins.port->IDR & oneWirePins.pin_ow_in ) != 0 ? 1:0;
|
|
|
-#else
|
|
|
- state = (oneWirePins.port->IDR & oneWirePins.pin_ow ) != 0 ? 1:0;
|
|
|
-#endif //OW_USE_2_WIRE
|
|
|
-
|
|
|
- setPinOut();
|
|
|
- OW_SET_HI;
|
|
|
- delay_us(OW_READ_DELAY);
|
|
|
- delay_us(OW_BOOSTER);
|
|
|
- /*
|
|
|
- if (!prim) {
|
|
|
- __enable_irq();
|
|
|
- }
|
|
|
- */
|
|
|
-// HAL_ResumeTick();
|
|
|
return state;
|
|
|
-#endif
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/**
|