Запись по TWI в внешнюю EEPROM 24LCXX

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
Chip_step
Родился
Сообщения: 19
Зарегистрирован: Сб янв 30, 2021 16:34:46

Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Chip_step »

пытаюсь передать через функцию параметры на запись в еепром, но какого то вылазит ошибка:
bool twi_master_trans(0xa0, *10, 100, *0, 0 ); //Error: declaration syntax error
0xa0 - адрес еепром

//запись
*10 - номер ячейки
100 - число

//чтение
*0 - номер ячейки
0 - число

Код: Выделить всё

/***********************************************************************************
 ATxmega TWI driver library for the CodeVisionAVR 
***********************************************************************************/

#ifndef _TWIX_INCLUDED_
#define _TWIX_INCLUDED_
 
#include <stdbool.h>
#include <string.h>
#include <io.h>

// TWI module general initialization
// module - pointer to the TWI peripheral module to be initialized
// ext_driver - enable using an external driver interface
// sda_hold - enable an internal hold time on SDA with respect to the
// SCL negative edge
void twi_init(TWI_t *module,bool ext_driver_intf,unsigned char sda_hold);

// TWI master definitions & functions

// structure that holds information used by the TWI master
// for performing a TWI bus transaction
typedef struct
{
TWI_t *module;                // ptr. to the used TWI interface module 
unsigned char slave_address;  // I2C slave address
unsigned char *tx_buffer;     // ptr. to transmit buffer
unsigned char bytes_to_tx;    // number of bytes to transmit to the slave
unsigned char tx_counter;     // number of transmitted bytes
unsigned char *rx_buffer;     // ptr. to receive buffer
unsigned char bytes_to_rx;    // number of bytes to receive from the slave
unsigned char rx_counter;     // number of received bytes
unsigned char result;         // transaction result
} TWI_MASTER_INFO_t;

// TWI master transaction result values
#define TWIM_RES_UNKNOWN 0
#define TWIM_RES_OK 1
#define TWIM_RES_BUFFER_OVERFLOW 2
#define TWIM_RES_ARBITRATION_LOST 3
#define TWIM_RES_BUS_ERROR 4
#define TWIM_RES_NACK_RECEIVED 5
#define TWIM_RES_FAIL 6

// macro used for calculating the value of the BAUD register for the desired
// TWI clock rate TWI_CLK_RATE [bps] based on the System Clock SYS_CLK [Hz]
#define TWI_BAUD_REG(SYS_CLK,TWI_CLK_RATE) (((SYS_CLK)/((TWI_CLK_RATE)*2))-5)

// TWI master initialization
// twi - pointer to the structure that holds information used by the TWI master
// for performing a TWI bus transaction
// module - pointer to the TWI peripheral module to be initialized as TWI master
// int_level - interrupt priority level to be used for TWI master
// baud_reg - initialization value for the TWI master BAUD register
void twi_master_init(
     TWI_MASTER_INFO_t *twi,
     TWI_t *module,
     TWI_MASTER_INTLVL_t int_level,
     unsigned char baud_reg);
     
// TWI master interrupt handler
// twi - pointer to the structure that holds information used by the TWI master
void twi_master_int_handler(TWI_MASTER_INFO_t *twi);

// функция, используемая для выполнения основной транзакции TWI
// twi - указатель на структуру, которая содержит информацию, используемую мастером TWI
// slave_addr - 7 bit address of the TWI slave with which the transaction must be performed
// tx_data - битовый адрес ведомого устройства TWI, с которым должна выполняться транзакция
// tx_count - количество байтов, которые должны быть переданы ведомому устройству во время транзакции
// rx_data - указатель на буфер, в котором хранятся данные, полученные от ведомого устройства
// rx_count - количество байтов, которые должны быть получены от ведомого устройства во время транзакции
// возвращает истину в случае успеха
bool twi_master_trans(
     TWI_MASTER_INFO_t *twi,
     unsigned char slave_addr,
     unsigned char *tx_data, unsigned char tx_count,
     unsigned char *rx_data, unsigned char rx_count);

// Определения и функции ведомого устройства TWI
     
// structure that holds information used by the TWI slave
// for performing a TWI bus transaction
typedef struct
{
TWI_t *module;                // ptr. к используемому интерфейсному модулю TWI
unsigned char *rx_buffer;     // ptr. получить буфер
unsigned char rx_buffer_size; // размер приемного буфера
unsigned char rx_index;       // индекс в приемном буфере последнего полученного байта
unsigned char *tx_buffer;     // ptr. передать буфер
unsigned char tx_index;       // индекс в буфере передачи последнего переданного байта
unsigned char bytes_to_tx;    // количество байтов для передачи мастеру
void (*twi_trans) (void);     // указатель на функцию обработки транзакции ведомого TWI
unsigned result;              // результат транзакции
} TWI_SLAVE_INFO_t;

// Значения результатов ведомой транзакции TWI
#define TWIS_RES_UNKNOWN 0
#define TWIS_RES_OK 1
#define TWIS_RES_ADDR_MATCH 2
#define TWIS_RES_BUFFER_OVERFLOW 3
#define TWIS_RES_TRANSMIT_COLLISION 4
#define TWIS_RES_BUS_ERROR 5
#define TWIS_RES_FAIL 6
#define TWIS_RES_HALT 7

// TWI slave initialization
// twi -указатель на структуру, которая содержит информацию, используемую TWI ведомым устройством  
// для выполнения TWI-шинной транзакции TWI
// module - указатель на периферийный модуль TWI, который будет инициализирован как ведомый TWI
// int_level - уровень приоритета прерывания, который будет использоваться для ведомого TWI
// match_any_addr - если истина, логика адреса совпадения подчиненного устройства отвечает на все полученные адреса
// addr - 7 bit адрес ведомого устройства TWI
// addr_mask_reg - value for the SLAVE.ADDRMASK register:
//                 if bit 0=0 -> bits 1..7 = slave address bit mask
//                 if bit 0=1 -> bits 1..7 = second slave address
// rx_buffer - указатель на ведомый приемный буфер
// rx_buffer_size - размер приемного буфера ведомого устройства
// tx_buffer - указатель на буфер передачи ведомого устройства
// twi_slave_trans - указатель на функцию обработки транзакции ведомого TWI
void twi_slave_init(
     TWI_SLAVE_INFO_t *twi,
     TWI_t *module,
     TWI_SLAVE_INTLVL_t int_level,
     bool match_any_addr,
     unsigned char addr,
     unsigned char addr_mask_reg,
     unsigned char *rx_buffer,
     unsigned char rx_buffer_size,
     unsigned char *tx_buffer,
     void (*twi_slave_trans)(void));
     
// Обработчик прерываний ведомого устройства TWI
// twi - указатель на структуру, которая содержит информацию, используемую ведомым устройством TWI
void twi_slave_int_handler(TWI_SLAVE_INFO_t *twi);

// функция, используемая для остановки транзакции ведомого TWI
// twi - указатель на структуру, которая содержит информацию, используемую ведомым устройством TWI 
void twi_slave_halt_trans(TWI_SLAVE_INFO_t *twi);

#pragma library twix.lib
          
#endif
Реклама
Аватара пользователя
Chip_step
Родился
Сообщения: 19
Зарегистрирован: Сб янв 30, 2021 16:34:46

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Chip_step »

Скажите как отправить в память: Число по номеру ячейки?
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Аlex »

как отправить в память: Число по номеру ячейки?
https://yandex.ru/search/?clid=1923018& ... 13299803.1
Просто тьма информации по этим микросхемам. Что конкретно Вам не понятно ? :dont_know:

PS: Одну тему создали, там развернулась огромная дискуссия, а Вы там не появляетесь. Ещё одну такую же хотите завести ? :facepalm:
Аватара пользователя
Chip_step
Родился
Сообщения: 19
Зарегистрирован: Сб янв 30, 2021 16:34:46

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Chip_step »

вот пытаюсь записать число 100, в 10-ю ячейку памяти:
bool twi_master_trans(TWI_MASTER_INFO_t *twi, unsigned char 0xa0, unsigned char *10, unsigned char 100, unsigned char *0, unsigned char 0);//где то нет ','

library twix.lib

Добавлено after 2 minutes 33 seconds:
За темой "Генератор с длительностью импульсов 20us с частотой 80Khz " я слежу :)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Zhuk72 »

Для начала почитайте про указатели.
"10-я ячейка памяти" как вы ее показали - это не указатель. Так же как и нулевая.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Реклама
Аватара пользователя
Chip_step
Родился
Сообщения: 19
Зарегистрирован: Сб янв 30, 2021 16:34:46

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Chip_step »

так я понял что не указатели, так в чем мой косяк?
Реклама
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение NStorm »

В том что у вас нет понимания что такое указатели и аргументы функции. Прочитайте про них: http://proguroki.ru/urok9/urok9_4/urok9 ... ty-fuctsii

И прочитайте описание функции. Вы даже значения её параметров неправильно поняли. Там всё совсем не так требуется.
Аватара пользователя
Chip_step
Родился
Сообщения: 19
Зарегистрирован: Сб янв 30, 2021 16:34:46

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Chip_step »

Спасибо за ссылочку, но я функции немного изучал. Скажите конкретно что не правильно? Приведите пример на данной функции:
bool twi_master_trans( TWI_MASTER_INFO_t *twi, unsigned char slave_addr, unsigned char *tx_data, unsigned char tx_count, unsigned char *rx_data, unsigned char rx_count)
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение NStorm »

По ссылке есть прекрасный пример для другой функции, но полностью аналогичного смысла применения. Дочитайте до него и разберитесь. Нет смысла приводить вам сейчас примеры для этой функции, если вы не разберетесь с указателями. Если бы разобрались, то не пытались бы писать *10 в аргументах функции.
Аватара пользователя
Chip_step
Родился
Сообщения: 19
Зарегистрирован: Сб янв 30, 2021 16:34:46

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Chip_step »

Материал конечно интересный, но без реального примера... Не очем.

Добавлено after 3 minutes 57 seconds:
Мне нужно на конкретном примере разбирается что-куда, лучше осваивается и запоминается.
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение NStorm »

А я вижу, что там полно примеров, вполне себе реальных. Отличный пример, прям в тему, в 9.4.3 с функцией swap.
Разобраться можно и без МК даже: https://godbolt.org/ Берем и смотрим примеры, как вызываются функции и передаются указатели в кач-ве аргументов прям онлайн. Осознаем, что делали до этого полностью не так и тогда можно уже предметно про функцию из либы для TWI говорить. "Нельзя приготовить яичницу не разбив яиц".
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Dimon456 »

Chip_step, за чем вы такой сложный пример взяли?
Это библиотечная функция CVAVR. В папке "EXAMPLES ATxmega" есть готовый пример.
Поищите в инете попроще пример.
Аватара пользователя
Chip_step
Родился
Сообщения: 19
Зарегистрирован: Сб янв 30, 2021 16:34:46

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Chip_step »

Привет это не явзял пример такой сложный, а пример меня взял :)
Этот вопрос нужно решить на "вчера" очень срочно нужно параметры сохранять в память, и числа могут быть в размере: 1 - 4 байта.
по этому и решил обратится на форум к спецам программерам.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Аlex »

Вам не дают готовую строчку, ибо нет в этом никакого смысла. Программа не может состоять только из одного сохранения каких-то там чисел. Всяко есть что-то ещё.
А вот как Вы будете делать это "что-то ещё" - неизвестно, учитывая Ваши знания в этой области :dont_know:
Аватара пользователя
Chip_step
Родился
Сообщения: 19
Зарегистрирован: Сб янв 30, 2021 16:34:46

Re: Запись по TWI в внешнюю EEPROM 24LCXX

Сообщение Chip_step »

Здравствуйте Alex. Ну напрасно вы так говорите: Вы будете делать это "что-то ещё"
Это "что-то ещё" у меня успешно работает :) Мне нужно всего лишь праметры сохранять в память.
библиотека TWIX не потдается.
Ответить

Вернуться в «AVR»