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

 
 
6 страниц V  « < 4 5 6  
Reply to this topicStart new topic
> Для "Peps" и остальных кто пользуется ЕАТ - исправления.
GeGeL
сообщение May 13 2012, 20:01
Сообщение #76


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Может, функция управления пинами unblocked?
Для гарантии попробуйте дергать в 0 и затем в 1 отдельными командами и считать в отдельные счетчики: посмотрим, только ли фронт или спад сбоят, или же оба.
Затем введите две задержки в 2-4 мкс между дерганьями и посмотрите результат.
В любом случае, даже если выйдете на 10 мкс периода тактового сигнала, то это вполне приемлемый результат.
Go to the top of the page
 
+Quote Post
Romashki
сообщение Aug 16 2012, 07:47
Сообщение #77


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 5-12-10
Пользователь №: 61 419



Вроде бы получилось написать свои функции SPI....но пришлось использовать комбинации, которые Симком запрещает.....ну...пока деваться некуда....
это функции типа while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK);

Функции, которые получились:

bool eeprom_ready(void)
{
u8 tmg;

while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK);
send_byte(0x05);
tmg=read_byte();
while(ebdat6_04WriteGpio(EEPROM_SELECT,1)!=FL_OK);

if((tmg&0x01) || !(tmg&0x02))return 0;
else return 1;
}

u8 read_byte(void)
{
u8 a,dats=0;
bool mBits;

for(a=0;a<8;a++)
{
while(ebdat6_04WriteGpio(EEPROM_CLK, 1)!=FL_OK);
dats<<=1;
while(ebdat6_05ReadGpio(EEPROM_DI,&mBits)!=FL_OK);
if(mBits)dats|=1;
while(ebdat6_04WriteGpio(EEPROM_CLK, 0)!=FL_OK);
}
return dats;
}


void send_byte(u8 bt)
{
u8 i;

for(i=0;i<8;i++)
{
if(bt&0x80)while(ebdat6_04WriteGpio(EEPROM_DO,1)!=FL_OK);
else while(ebdat6_04WriteGpio(EEPROM_DO,0)!=FL_OK);
while(ebdat6_04WriteGpio(EEPROM_CLK, 1)!=FL_OK);
bt<<=1;
while(ebdat6_04WriteGpio(EEPROM_CLK, 0)!=FL_OK);
}
}

//******************************************************************
void write_ext_eeprom (u32 address,u16 count,u8 *bfur)
{
u16 i;

init_ext_eeprom();

while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK);

send_byte(0xAD);
send_byte(address>>16);
send_byte(address>>8);
send_byte(address);
send_byte(bfur[0]); /* send 1st byte to be programmed */
send_byte(bfur[1]); /* send 2nd byte to be programmed */

while(ebdat6_04WriteGpio(EEPROM_SELECT,1)!=FL_OK);

for(i=2;i<count;i+=2)
{
ebdat05_09delay(10);//microseconds
while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK);
send_byte(0xAD);
send_byte(bfur[i]); /* send 1st byte to be programmed */
send_byte(bfur[i+1]);
while(ebdat6_04WriteGpio(EEPROM_SELECT,1)!=FL_OK);
}
ebdat05_09delay(10);//microseconds
while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK); /* enable device */
send_byte(0x04); /* send WRDI command */
while(ebdat6_04WriteGpio(EEPROM_SELECT,1)!=FL_OK); /* disable device */
ebdat05_09delay(10);//microseconds
eeprom_ready();

init_ext_eeprom();
}
//******************************************************************
void read_ext_eeprom(u32 address,u16 count,u8 *bfur)
{
u16 i;

while(ebdat6_04WriteGpio(EEPROM_SELECT,0)!=FL_OK);

send_byte(0x03);
send_byte(address>>16);
send_byte(address>>8);
send_byte(address);

for(i=0;i<count;i++)bfur[i]=read_byte();
while(ebdat6_04WriteGpio(EEPROM_SELECT,1)!=FL_OK);
}
//******************************************************************

Можно даже без ebdat05_09delay(10);
Go to the top of the page
 
+Quote Post
bugish
сообщение Oct 2 2012, 12:49
Сообщение #78


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 7-06-12
Из: Севастополь, Россия
Пользователь №: 72 202



Вот и мне пришлось вплотную использовать SPI начал на 25LC160 16K SPI™ Bus Serial EEPROM
пришла в голову мысль использовать функции SPI из EAT, а под ChipSelect использовать GPIO11, все отлично работает.
Появилась необходимость использовать АЦП adc084s021 SPI 4-chanel 8-bit, но там необходимо писать и читать одновременно после 4-го SLK, и стандартные функции ЕАТ уже не катят, как с EEPROM (там все просто начала запись потом чтение).
Пришлось написать свои функции на основе предидущего сообщения.

Было бы хорошо иметь совмещенную во времени функцию SpiWriteReadByte() ,чтоб писала и читала одновременно (такой пользовались на Siemens TC-65).

Так как нет фунции SpiUnsubscribe() "освободить ноги", то пришлось делать две SPI-шины одна для SPI-аппаратная, вторая SPI-программная.

Пример с использованием альтернативнго SC.

void WR_SPI_D(u16 addr, u8 data_SPI) /*WRITE BYTE 25LC160 SC->GPIO11*/
{
/*Set the write enable latch (enable write operations)*/
ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x06);
ebdat6_04WriteGpio(FL_PIN_67, 1);

ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x02);
ebdat5_02SpiWriteByte(addr>>8);
ebdat5_02SpiWriteByte(addr & 0xFF);
ebdat5_02SpiWriteByte(data_SPI);
ebdat6_04WriteGpio(FL_PIN_67, 1);
}
/*-----------------------------------------------------------*/
u8 RD_SPI_D(u16 addr) /*READ BYTE 25LC160 SC->GPIO11*/
{
u8 data_r=0;

ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x03);
ebdat5_02SpiWriteByte(addr>>8);
ebdat5_02SpiWriteByte(addr & 0xFF);
data_r = ebdat5_03SpiReadByte();
ebdat6_04WriteGpio(FL_PIN_67, 1);
return data_r;
}
/*-----------------------------------------------------------*/
void WR_SPI_SR( u8 data_SPI) /*WRITE STATUS REGISTER 25LC160 SC->GPIO11*/
{
/*Set the write enable latch (enable write operations)*/
ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x06);
ebdat6_04WriteGpio(FL_PIN_67, 1);

ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x01);
ebdat5_02SpiWriteByte(data_SPI);
ebdat6_04WriteGpio(FL_PIN_67, 1);
}
/*-----------------------------------------------------------*/
u8 RD_SPI_SR(u16 addr) /*READ STATUS REGISTER 25LC160 SC->GPIO11*/
{
u8 data_r=0;

ebdat6_04WriteGpio(FL_PIN_67, 0);
ebdat5_02SpiWriteByte(0x05);
data_r = ebdat5_03SpiReadByte();
ebdat6_04WriteGpio(FL_PIN_67, 1);
return data_r;
}
/*-----------------------------------------------------------*/
/* Initialization SPI*/
ebdat5_01SpiConfigure( SSI_4WIRE, SSI_ACTIVE_LOW, FL_PIN_14, SSI_SYSTEM_DIV_512, SSI_FALLING_EDGE, SSI_MSBFIRST);
if (ebdat6_08pinConfigureToUnused(FL_PIN_67) == FL_OK)
if (ebdat6_02GpioSubscribe(FL_PIN_67,FL_GPIO_OUTPUT,1) == FL_OK)
ebdat7_01DebugTrace("INIT PIN_67 OK \r\n");
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Oct 2 2012, 14:32
Сообщение #79


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Уже писал в какой то ветке: вариантов SPI множество и абсолютно нецелесообразно вводить в EAT готовые функции. Гораздо лучше было бы иметь возможность физического доступа к ножкам, чтобы не использовать функции типа ebdat6_04WriteGpio, а непосредственно писать-читать пины. Тогда можно было бы делать быстрые реализации SPI на свой вкус, а по желанию даже использовать asm-вставки.
Go to the top of the page
 
+Quote Post
Romashki
сообщение Oct 2 2012, 15:55
Сообщение #80


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 5-12-10
Пользователь №: 61 419



Может кто сталкивался с приемом смс в ЕАТ. Отсылаю 6 символов латиницей - получаю, открываю ( ищу в строке комбинацию UNREAD\",\"), считываю в буфер номер телефона и текст смс, а вот когда отправляю около 60ти символов на русском комбинацию UNREAD\",\" вообще не находит и выдает обрывок окончания смс (выходит из прерывания по default). Такое чувство что модем длину выдает полученных данных (flEventBuffer.eventData.modemdata_evt.length), а сам буфер еще не заполняет (flEventBuffer.eventData.modemdata_evt.data)..... Может кто поборол эту проблему.....
Go to the top of the page
 
+Quote Post

6 страниц V  « < 4 5 6
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th August 2025 - 07:57
Рейтинг@Mail.ru


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