Реалити-шоу «КБ13 и АЦП». День 6

Запустили rs-485. Пока правда только на передачу.
Работает — и ладно, когда дойдет дело до него разберемся. Впрочем, меня гложут подозрения что виновата не плата, а гипер-терминал на ноуте под вистой — при попытке передать десяток символов виснет до синего экрана.

Начал писать прошивку (базовая версия, без наворотов). Работу, в принципе, можно разделить на три этапа: работа с конфигурацией (записать во флэш, считать, проверить валидность и т.п.), основной модуль (ацп и память) и обмены с внешним миром.

Сегодня был день посвященный конфигу.
Хидер:

/*
 * ain16_usercfg.h
 *
 *  Created on: 09.06.2009
 *      Author: Maxx
 */

#ifndef AIN16_USERCFG_H_
#define AIN16_USERCFG_H_

#include "compiler.h"

/*
 * ain16_fifo_mode - режим буфера FIFO по достижении установленной границы
 */
typedef enum ain16_fifo_mode {
	// прекращение оцифровки
	AIN16_FIFO_STOP = 0,
	// заполнение буфера сначала
	AIN16_FIFO_REFRESH
} ain16_fifo_mode_t;

/*
 * adc_userconfig_t - пользовательская конфигурация ацп
 * 	freq частота оцифровки в микросекундах
 *  fifo_border граница буфера, в КБ
 *  fifo_mode режим при достижении границы
 *  mask маска чтения каналов
 *
 */
typedef struct ain16_userconfig {
	U16 	freq;
	U16 	fifo_border;
	ain16_fifo_mode_t	fifo_mode;
	U16	mask;
} ain16_userconfig_t;

/*
 * ain16_nvram_uconfig_t структура данных для записи конфигурации во flash user page
 * 	configured признаг конфигурации, должен быть 0хАА, если конфиг валиден
 * 	checksum контрольная сумма конфига
 * 	config сам конфиг
 *
 */
typedef /*const*/ struct ain16_nvram_uconfig {
	U8	configured;
	U8	checksum;
	ain16_userconfig_t	config;
} ain16_nvram_uconfig_t;

/*
 * Считать конфигурацию АЦП
 * 	config адрес для записи считанного конфига
 * Возвращает 1 в случае успешного считывания, 0 в ином случае
 */
extern int ain16_get_userconfig(ain16_userconfig_t * config);

/*
 * Записать конфигурацию АЦП
 * 	config адрес конфига
 * Возвращает 1 в случае успешной записи, 0 в ином случае
 */
extern int ain16_set_userconfig(ain16_userconfig_t * config);

/*
 * Проверить, сконфигурировано ли АЦП
 * Возвращает 1 в случае найденной конфигурации, 0 в ином случае
 */
extern int ain16_check_userconfig(void);

#endif /* AIN16_USERCFG_H_ */

Сами функции еще полны непечатных каментов и недоделок.

Похожий бред:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Protected by WP Anti Spam