реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F103 + ПЛИС MAX II
Imin
сообщение Aug 24 2016, 14:29
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 22-05-14
Из: Москва
Пользователь №: 81 742



Добрый день.

Есть плата с МК STM32F103 и ПЛИС MAX II. Дали задачу реализовать интерфейс передачи данных между ними. ПЛИС постоянно отправляет данные в МК . Используются три линии: CLK, DATA, RD. Формат данных: 32 бита данные + 16 бит CRC. Линия RD нужна для оповещения МК о передаче CRC.
Примеры передачи:









Код в МК для приема:
CODE

while (1) {

if(RD) //Проверяем сигнал отправки CRC cуммы
{
if(CLK)//Проверка положительного фронта частоты
{
if(isReady == 0)//Проверка смены такта частоты CLK
{
isReady = 1;

if(IN) // Проверка на 1 или 0 входных данных
{
miso |= mask;
}

mask <<= 1;// сдвиг маски

if(mask > 0x8000)//проверка достигла ли маска оговоренной длины
{

if(miso == 0x1D0F) {
MDR_PORTB->RXTX ^= toggle; //мигаем светодиодом
}
mask = 0x01;
miso = 0;

}
}

}
else
{
isReady = 0;
}


МК тактируется от 16 МГц, а ПЛИС - от внутреннего генератора на 5 МГц. С ПЛИС отправляю 0xFFFFFFFF и CRC сумму этого числа 0x1DOF.
МК правильно принимает 1 передачу через 3.

Подскажите, пожалуйста, в чем может быть проблема ?
Спасибо.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 24 2016, 15:08
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Imin @ Aug 24 2016, 17:29) *
Добрый день.

Есть плата с МК STM32F103 и ПЛИС MAX II. Дали задачу реализовать интерфейс передачи данных между ними. ПЛИС постоянно отправляет данные в МК . Используются три линии: CLK, DATA, RD. Формат данных: 32 бита данные + 16 бит CRC. Линия RD нужна для оповещения МК о передаче CRC.

МК тактируется от 16 МГц, а ПЛИС - от внутреннего генератора на 5 МГц. С ПЛИС отправляю 0xFFFFFFFF и CRC сумму этого числа 0x1DOF.
МК правильно принимает 1 передачу через 3.

Подскажите, пожалуйста, в чем может быть проблема ?
Спасибо.


А по какому сигналу МК начинает чтение? Есть ли заголовок сообщения? Передача идет последовательным кодом?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Aug 24 2016, 15:13
Сообщение #3


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..почему не использовали SPI микроконтроллера? как раз три ноги.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Imin
сообщение Aug 24 2016, 15:15
Сообщение #4





Группа: Участник
Сообщений: 5
Регистрация: 22-05-14
Из: Москва
Пользователь №: 81 742



Цитата(iosifk @ Aug 24 2016, 19:08) *
А по какому сигналу МК начинает чтение? Есть ли заголовок сообщения? Передача идет последовательным кодом?


Сброс у МК и ПЛИС одновременный, передача данных идет всегда. Определенного сигнала чтения нет.
Заголовка сообщения нету. Да, передача идет последовательным кодом.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 24 2016, 15:28
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Imin @ Aug 24 2016, 18:15) *
Сброс у МК и ПЛИС одновременный, передача данных идет всегда. Определенного сигнала чтения нет.
Заголовка сообщения нету. Да, передача идет последовательным кодом.

Поздравляю! Достаточно одного ложного фронта и больше ничего работать не будет до следующего сброса...
Или скажем в МК сработает прерывание и он отвлечется немного...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Aug 24 2016, 15:32
Сообщение #6


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..может вы выдаёте код из плис неправильно? можно её код посмотреть?


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Aug 24 2016, 16:14
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



Если Вы не используете SPI, то нельзя-ли обрабатывать прерывание от фронта CLK, и в этом прерывании читать порт и сдвигать?


--------------------
ASB
Go to the top of the page
 
+Quote Post
1113
сообщение Aug 24 2016, 17:09
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 24-02-06
Из: Москва
Пользователь №: 14 658



на какой частоте работает ядро процессора?
вы уверены, что процессор успевает по времени обрабатывать 5 МГц циклы?
Go to the top of the page
 
+Quote Post
Imin
сообщение Aug 24 2016, 19:02
Сообщение #9





Группа: Участник
Сообщений: 5
Регистрация: 22-05-14
Из: Москва
Пользователь №: 81 742



Цитата(1113 @ Aug 24 2016, 20:09) *
на какой частоте работает ядро процессора?
вы уверены, что процессор успевает по времени обрабатывать 5 МГц циклы?

Ядро процессора работает на 16 МГц. Частота передачи 80 Гц.
Go to the top of the page
 
+Quote Post
Imin
сообщение Aug 25 2016, 07:43
Сообщение #10





Группа: Участник
Сообщений: 5
Регистрация: 22-05-14
Из: Москва
Пользователь №: 81 742



Цитата(Lmx2315 @ Aug 24 2016, 18:32) *
..может вы выдаёте код из плис неправильно? можно её код посмотреть?

Да вот:

CODE

module CRC(

input clk,
input reset,
input data_in,
output reg RD,
output out

);

reg [15:0] lfsr_c;

reg [15:0] counter;
reg [15:0] sr;
reg [15:0] lfsr_q;
reg flag;



always @(posedge clk or negedge reset ) begin
if(!reset) begin
lfsr_q <= {16{1'b1}};
counter <= 0;
sr<=0;
flag <= 0;
end
else begin
lfsr_q <= lfsr_c;


counter <= counter + 1;

sr[14:0] <= sr[15:1];

case(counter)

15: begin sr <= 0;

if(flag) begin lfsr_q <= {16{1'b1}};
flag <= 0;
counter <= 0; end

end


32: begin sr <= lfsr_q;

end

endcase


if(counter == 33) begin
flag <= 1;
counter <= 0;
lfsr_q <= {16{1'b1}};

end//if


end
end // always

always @(negedge clk ) begin

case(counter)

15: RD<= 0;

32: RD<= 1;


endcase


end // always


always @(*) begin

lfsr_c[0] = lfsr_q[15] ^ data_in;
lfsr_c[1] = lfsr_q[0];
lfsr_c[2] = lfsr_q[1];
lfsr_c[3] = lfsr_q[2];
lfsr_c[4] = lfsr_q[3];
lfsr_c[5] = lfsr_q[4] ^ lfsr_q[15] ^ data_in;
lfsr_c[6] = lfsr_q[5];
lfsr_c[7] = lfsr_q[6];
lfsr_c[8] = lfsr_q[7];
lfsr_c[9] = lfsr_q[8];
lfsr_c[10] = lfsr_q[9];
lfsr_c[11] = lfsr_q[10];
lfsr_c[12] = lfsr_q[11] ^ lfsr_q[15] ^ data_in;
lfsr_c[13] = lfsr_q[12];
lfsr_c[14] = lfsr_q[13];
lfsr_c[15] = lfsr_q[14];




end // always



assign out = sr[0];


endmodule


Go to the top of the page
 
+Quote Post
Imin
сообщение Aug 25 2016, 08:45
Сообщение #11





Группа: Участник
Сообщений: 5
Регистрация: 22-05-14
Из: Москва
Пользователь №: 81 742



Цитата(Aleksandr Baranov @ Aug 24 2016, 19:14) *
Если Вы не используете SPI, то нельзя-ли обрабатывать прерывание от фронта CLK, и в этом прерывании читать порт и сдвигать?


Извините меня, но я не понял вашу идею. Не могли бы объяснить по-другому?
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Aug 25 2016, 12:26
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



Цитата(Imin @ Aug 25 2016, 04:45) *
Извините меня, но я не понял вашу идею. Не могли бы объяснить по-другому?

Если я правильно понял, Вы в бесконечном цикле читаете GPIO, ловя, фронты импульсов RD и CLK. Если это действительно так, то лучше бы это делать по прерываниям EXTI.

Сообщение отредактировал Aleksandr Baranov - Aug 25 2016, 12:29


--------------------
ASB
Go to the top of the page
 
+Quote Post
alag57
сообщение Aug 25 2016, 13:08
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



Цитата(Imin @ Aug 24 2016, 19:29) *
Есть плата с МК STM32F103 и ПЛИС MAX II. Дали задачу реализовать интерфейс передачи данных между ними. ПЛИС постоянно отправляет данные в МК . Используются три линии: CLK, DATA, RD. Формат данных: 32 бита данные + 16 бит CRC. Линия RD нужна для оповещения МК о передаче CRC.


Сделать линию RD для оповещения МК о начале передачи данных, включая CRC.
Думаю изменений в коде для плиски минут на 5 работы.
Затем применить для приема этих 6 байт SPI, как уже отмечали выше.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01553 секунд с 7
ELECTRONIX ©2004-2016