PeterBeklemishev / mila

Arduino alternative based on MILANDR processor
6 stars 0 forks source link

Extended "mode" param in "portInit()" instead of overriding #2

Closed ko10ok closed 9 years ago

ko10ok commented 9 years ago

"0х04 OE[15:0] MDR_PORTx->OE" means 16bit of "uint32_t mode" used? Use part of param "mode" as exclusion(inversion) mask, instead of multiply overrided "portInit"

How to planed now: exaple usage: portInit(port, OUT/IN); ----- any PORT portInit(port, OUT/IN, OUT/IN, OUT/IN) ----- PORTC only portInit(port, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN) ----- PORTE only portInit(port, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN) ----- PORTADF portInit(port, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN) ----- PORTB

Suggestion:

#define IN 0x0000?
#define OUT 0xFFFF?

#define OUT_P(pin) ~((1) << (pin+16))
#define IN_P(pin) ((1) << (pin+16)) 

if(mode&&0x0000FFFF == OUT)..
        ...
    port->OE |= 0xFFFFFFFFF && (mode&&0xFFFF0000 >> 16)
        ...

elif(mode&&0x0000FFFF == IN)
        ...
    port->OE |= 0x000000000 | (mode&&0xFFFF0000 >> 16)
        ...

example usage:

portInit(PB,IN | OUT_P(2) | OUT_P(3) ) //kinda windows-like style of parameter portInit(PB,OUT | IN_P(2) | IN_P(6) | IN_P(7) ) //kinda windows-like style of parameter compilation
dubkov commented 9 years ago

portInit(PB,OUT | IN_P(2) | IN_P(3) ) не будет работать. 1 | 0 = 1, биты 2 и 3 не сменятся

ko10ok commented 9 years ago

Сменятся.. это не вся реализация, я там смещение еще всякую херь забыл добавить... Вопрос только в том что нужно ли это в таком виде? Или это неудобно, и есть более кошерные способы. и тебе больше нравицо: portInit(port, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN, OUT/IN)

dubkov commented 9 years ago

Ну так тоже неплохо, в соседнем трэде reDetection тоже предлагает весь порт например на аут, а потом отдельные пины на ин.

Кстати, что делать, если мне надо инициализировать половину порта на выход, а остальное никак не трогать? :)

ko10ok commented 9 years ago

Тогда пининит. А че за соседний тред? Где найти? Типа порт инит() и иметь такой же массовый пининит() для кусков порта? Тогда тоже норм)

dubkov commented 9 years ago

А че за соседний тред? Где найти?

Блин, я хз, можт удалилось... Суть в том, чтобы делать, допустим, так: portInit(PORTB,OUT) pinInit(B2,IN) pinInit(B3,IN)

ReDetection commented 9 years ago

где-где... в коммитах это, 044d88b и c5d991c. ну и, соответственно, попало в пулл-реквест #6, содержащий эти коммиты.

@ko10ok, учи оформление кода, это всего лишь символ ` вставить

dubkov commented 9 years ago

@ko10ok тебя устроит, что у нас работает так:

portInit(PORTB,OUT) pinInit(B2,IN) pinInit(B3,IN)

?

ko10ok commented 9 years ago

Пока пусть так и будет. Хотя сам pinInit(B2,IN) в последствии хотелось бы доделать до массового, аналогично массовому присвоению (что бы инициализировать только те ноги которые нужны)

dubkov commented 9 years ago

в последствии хотелось бы доделать до массового, аналогично массовому присвоению (что бы инициализировать только те ноги которые нужны)

Не делать же это перегрузкой функции pinInit...

Раскуривать DSL, узнавать, можно ли это сделать средствами препроцессора