Перейти к содержанию
    

STM32F4xx IEEE1588

Здравствуйте.

Если кто-нибудь использовал PTP в STM32 подскажите пожалуйста.

В данном блоке есть пара регистров ETH_PTPTSHR и ETH_PTPTSLR. Если я читаю из них текущее значение, то получается

пока я читаю из одного, то в это время в другом значение может измениться.

В Reference manual проэтот блок вообще мало что написано, а application manual на эту тему я вообще не нашел.

Нашел лишь в сети проект и библиотеки под это дело.

В них есть функции чтения этих регистров

static uint32_t ETH_PTPSubSecond2NanoSecond(uint32_t SubSecondValue)
{
	uint64_t val = SubSecondValue * 1000000000ll;
	val >>= 31;

	return val;
}

void ETH_PTPTime_GetTime(struct ptptime_t * timestamp)
{
	timestamp->tv_nsec = ETH_PTPSubSecond2NanoSecond(ETH->PTPTSLR);
	timestamp->tv_sec = ETH->PTPTSHR;
}


И, как мне кажется, в них тоже кроется указанная выше опасность.

Адреса этих регистров идут друг за другом

ETH_PTPTSHR - Address offset: 0x0708
ETH_PTPTSLR - Address offset: 0x070C 

Поможет ли исправить ситуацию, если я заставлю компилятор читать значения из этих регистров с помощью инструкции LDRD ?

Или я чего-то не понимаю ?



 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как-то так:

uint32_t low, high, high2;
high = ETH->PTPTSHR;
do
{
    high2 = high;
    low  = ETH->PTPTSLR;
    high = ETH->PTPTSHR;
}
while (high != high2);

См. тут, например: https://electronics.stackexchange.com/questions/3849/reading-a-16-bit-timer-on-an-8-bit-mcu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, dimka76 сказал:

В данном блоке есть пара регистров ETH_PTPTSHR и ETH_PTPTSLR. Если я читаю из них текущее значение, то получается

пока я читаю из одного, то в это время в другом значение может измениться.

В Reference manual проэтот блок вообще мало что написано, а application manual на эту тему я вообще не нашел.

Зато написано про "Enhanced Tx DMA descriptors" и "Enhanced Rx DMA descriptors format with IEEE1588 time stamp".

т.е. самому читать эти регистры не нужно, DMA в процессе приёма/передачи их само прочитает и в поля TDES6/TDES7 (RDES6/RDES7) запишет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, SSerge said:

Зато написано про "Enhanced Tx DMA descriptors" и "Enhanced Rx DMA descriptors format with IEEE1588 time stamp".

т.е. самому читать эти регистры не нужно, DMA в процессе приёма/передачи их само прочитает и в поля TDES6/TDES7 (RDES6/RDES7) запишет.

Я этот таймер счетчик использую еще и как системное время ))) Типа вместо SysTick.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

53 minutes ago, dimka76 said:

А как вариант с LDRD ? Не прокатит ?

А чем LDRD лучше? Всё равно регистры будут читаться по очереди.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, dimka76 сказал:

А как вариант с LDRD ? Не прокатит ?

А разрядность шины к регистрам периферии в вашем МК какова? 32 бита? Как тогда она поможет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, scifi said:

А чем LDRD лучше? Всё равно регистры будут читаться по очереди.

 

13 hours ago, jcxz said:

А разрядность шины к регистрам периферии в вашем МК какова? 32 бита? Как тогда она поможет?

Да, примерно это я и ожидал услышать )))

Тогда остается делать только как советовал scifi

 

uint32_t low, high, high2;
high = ETH->PTPTSHR;
do
{
    high2 = high;
    low  = ETH->PTPTSLR;
    high = ETH->PTPTSHR;
}
while (high != high2);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...