36
36
#include "common-hal/rp2pio/StateMachine.h"
37
37
38
38
static const uint16_t parallel_program [] = {
39
+ // .side_set 1
39
40
// .wrap_target
40
- // out pins, 8
41
- // set pins 0
42
- //0x6008,
43
- //0xe001
41
+ 0x6008 , // out pins, 8 side 0
42
+ 0xB042 // nop side 1
44
43
// .wrap
45
- 0x6008 ,
46
- 0xB042
47
44
};
48
45
49
46
void common_hal_displayio_parallelbus_construct (displayio_parallelbus_obj_t * self ,
50
47
const mcu_pin_obj_t * data0 , const mcu_pin_obj_t * command , const mcu_pin_obj_t * chip_select ,
51
48
const mcu_pin_obj_t * write , const mcu_pin_obj_t * read , const mcu_pin_obj_t * reset ) {
52
49
53
- // TODO: Implement with PIO and DMA.
54
-
55
50
uint8_t data_pin = data0 -> number ;
56
- mp_printf (& mp_plat_print , "data pin %d\n" , data_pin );
57
51
for (uint8_t i = 0 ; i < 8 ; i ++ ) {
58
52
if (!pin_number_is_free (data_pin + i )) {
59
53
mp_raise_ValueError_varg (translate ("Bus pin %d is already in use" ), i );
60
54
}
61
55
}
62
56
63
57
uint8_t write_pin = write -> number ;
64
- mp_printf (& mp_plat_print , "write pin %d\n" , write_pin );
65
58
if (!pin_number_is_free (write_pin )) {
66
59
mp_raise_ValueError_varg (translate ("Bus pin %d is already in use" ), write_pin );
67
60
}
68
61
69
-
70
62
self -> command .base .type = & digitalio_digitalinout_type ;
71
63
common_hal_digitalio_digitalinout_construct (& self -> command , command );
72
64
common_hal_digitalio_digitalinout_switch_to_output (& self -> command , true, DRIVE_MODE_PUSH_PULL );
@@ -75,15 +67,12 @@ void common_hal_displayio_parallelbus_construct(displayio_parallelbus_obj_t* sel
75
67
common_hal_digitalio_digitalinout_construct (& self -> chip_select , chip_select );
76
68
common_hal_digitalio_digitalinout_switch_to_output (& self -> chip_select , true, DRIVE_MODE_PUSH_PULL );
77
69
78
- //self->write.base.type = &digitalio_digitalinout_type;
79
- //common_hal_digitalio_digitalinout_construct(&self->write, write);
80
- //common_hal_digitalio_digitalinout_switch_to_output(&self->write, true, DRIVE_MODE_PUSH_PULL);
81
-
82
70
self -> read .base .type = & digitalio_digitalinout_type ;
83
71
common_hal_digitalio_digitalinout_construct (& self -> read , read );
84
72
common_hal_digitalio_digitalinout_switch_to_output (& self -> read , true, DRIVE_MODE_PUSH_PULL );
85
73
86
74
self -> data0_pin = data_pin ;
75
+ self -> write = write_pin ;
87
76
88
77
self -> reset .base .type = & mp_type_NoneType ;
89
78
if (reset != NULL ) {
@@ -96,23 +85,22 @@ void common_hal_displayio_parallelbus_construct(displayio_parallelbus_obj_t* sel
96
85
97
86
never_reset_pin_number (command -> number );
98
87
never_reset_pin_number (chip_select -> number );
99
- never_reset_pin_number (write -> number );
88
+ never_reset_pin_number (write_pin );
100
89
never_reset_pin_number (read -> number );
101
90
for (uint8_t i = 0 ; i < 8 ; i ++ ) {
102
91
never_reset_pin_number (data_pin + i );
103
92
}
104
93
94
+ // Calculate pin usage all data pins + write pin
105
95
uint32_t pin_usage = 0 ;
106
- for (int pin_number = 2 ; pin_number < 10 ; pin_number ++ ) {
96
+ for (uint8_t pin_number = data_pin ; pin_number < data_pin + 8 ; pin_number ++ ) {
107
97
pin_usage += (1 << pin_number );
108
98
}
109
99
pin_usage += (1 << write_pin );
110
- mp_printf (& mp_plat_print , "pin usage %x\n" , pin_usage );
111
100
112
- //uint8_t pin_number = digitalinout->pin->number;
113
101
bool ok = rp2pio_statemachine_construct (& self -> state_machine ,
114
102
parallel_program , sizeof (parallel_program ) / sizeof (parallel_program [0 ]),
115
- 48000000 , //125000000, // freq 24Mhz
103
+ 60000000 , // 48000000, //125000000, // freq 24Mhz
116
104
NULL , 0 , // init
117
105
data0 , 8 , // first out pin, # out pins
118
106
NULL , 0 , // first in pin, # in pins
@@ -128,9 +116,6 @@ void common_hal_displayio_parallelbus_construct(displayio_parallelbus_obj_t* sel
128
116
// Do nothing. Maybe bitbang?
129
117
return ;
130
118
}
131
- mp_printf (& mp_plat_print , "ok %d\n" , ok );
132
- mp_printf (& mp_plat_print , "smvalues: %d %d %d\n" , self -> state_machine .state_machine , self -> state_machine .pins , self -> state_machine .actual_frequency );
133
-
134
119
}
135
120
136
121
void common_hal_displayio_parallelbus_deinit (displayio_parallelbus_obj_t * self ) {
@@ -140,7 +125,7 @@ void common_hal_displayio_parallelbus_deinit(displayio_parallelbus_obj_t* self)
140
125
141
126
reset_pin_number (self -> command .pin -> number );
142
127
reset_pin_number (self -> chip_select .pin -> number );
143
- reset_pin_number (self -> write . pin -> number );
128
+ reset_pin_number (self -> write );
144
129
reset_pin_number (self -> read .pin -> number );
145
130
reset_pin_number (self -> reset .pin -> number );
146
131
}
@@ -172,34 +157,8 @@ void common_hal_displayio_parallelbus_send(mp_obj_t obj, display_byte_type_t byt
172
157
173
158
displayio_parallelbus_obj_t * self = MP_OBJ_TO_PTR (obj );
174
159
175
- /*mp_printf(&mp_plat_print, "send bt %d cs %d dl %d data: ", byte_type, chip_select, data_length);
176
- int max = 8;
177
- if (data_length < max)
178
- max = data_length;
179
- for (int i = 0; i < max; i++) {
180
- mp_printf(&mp_plat_print, "%x ", data[i]);
181
- }*/
182
-
183
160
common_hal_digitalio_digitalinout_set_value (& self -> command , byte_type == DISPLAY_DATA );
184
- //mp_printf(&mp_plat_print, ".");
185
-
186
- //for (int i = 0; i < data_length; i++) {
187
- //common_hal_digitalio_digitalinout_set_value(&self->write, 0);
188
- //pio_sm_put_blocking(self->state_machine.pio, self->state_machine.state_machine, *data);
189
- //common_hal_digitalio_digitalinout_set_value(&self->write, 1);
190
- //mp_printf(&mp_plat_print, "%x", *data);
191
- //data++;
192
- //}
193
- //pio_sm_put_blocking(self->state_machine.pio, self->state_machine.state_machine, 255);
194
- //bool success = common_hal_rp2pio_statemachine_write(&self->state_machine, data, data_length);
195
- //common_hal_mcu_delay_us(50000);
196
- //pio_sm_put_blocking(self->state_machine.pio, self->state_machine.state_machine, 0);
197
- //common_hal_mcu_delay_us(50000);
198
-
199
- bool success = common_hal_rp2pio_statemachine_write (& self -> state_machine , data , data_length );
200
-
201
- //mp_printf(&mp_plat_print, "%d", success);
202
- //mp_printf(&mp_plat_print, ",");
161
+ common_hal_rp2pio_statemachine_write (& self -> state_machine , data , data_length );
203
162
}
204
163
205
164
void common_hal_displayio_parallelbus_end_transaction (mp_obj_t obj ) {
0 commit comments