* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
- * 1. The above copyright notice and this permission notice shall be
+ * 1. The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
- * 2. If the Software is incorporated into a build system that allows
+ * 2. If the Software is incorporated into a build system that allows
* selection among a list of target devices, then similar target
* devices manufactured by PJRC.COM must be included in the list of
* target devices and selectable in the same manner.
* SOFTWARE.
*/
-#include "mk20dx128.h"
-//#include "HardwareSerial.h"
#include "usb_dev.h"
+#if F_CPU >= 20000000 && defined(NUM_ENDPOINTS)
+
+#include "kinetis.h"
+//#include "HardwareSerial.h"
#include "usb_mem.h"
// buffer descriptor table
//serial_print("\n");
for (list = usb_descriptor_list; 1; list++) {
if (list->addr == NULL) break;
- //if (setup.wValue == list->wValue &&
+ //if (setup.wValue == list->wValue &&
//(setup.wIndex == list->wIndex) || ((setup.wValue >> 8) == 3)) {
if (setup.wValue == list->wValue && setup.wIndex == list->wIndex) {
data = list->addr;
usb_packet_t *ret;
endpoint--;
if (endpoint >= NUM_ENDPOINTS) return NULL;
- __disable_irq();
+ __mask_irq();
ret = rx_first[endpoint];
if (ret) {
rx_first[endpoint] = ret->next;
usb_rx_byte_count_data[endpoint] -= ret->len;
}
- __enable_irq();
+ __unmask_irq();
//serial_print("rx, epidx=");
//serial_phex(endpoint);
//serial_print(", packet=");
{
uint32_t count=0;
- __disable_irq();
+ __mask_irq();
for ( ; p; p = p->next) {
count += p->len;
}
- __enable_irq();
+ __unmask_irq();
return count;
}
endpoint--;
if (endpoint >= NUM_ENDPOINTS) return 0;
- __disable_irq();
+ __mask_irq();
for (p = tx_first[endpoint]; p; p = p->next) count++;
- __enable_irq();
+ __unmask_irq();
return count;
}
cfg = usb_endpoint_config_table;
//serial_print("rx_mem:");
- __disable_irq();
+ __mask_irq();
for (i=1; i <= NUM_ENDPOINTS; i++) {
if (*cfg++ & USB_ENDPT_EPRXEN) {
if (table[index(i, RX, EVEN)].desc == 0) {
table[index(i, RX, EVEN)].addr = packet->buf;
table[index(i, RX, EVEN)].desc = BDT_DESC(64, 0);
usb_rx_memory_needed--;
- __enable_irq();
+ __unmask_irq();
//serial_phex(i);
//serial_print(",even\n");
return;
table[index(i, RX, ODD)].addr = packet->buf;
table[index(i, RX, ODD)].desc = BDT_DESC(64, 1);
usb_rx_memory_needed--;
- __enable_irq();
+ __unmask_irq();
//serial_phex(i);
//serial_print(",odd\n");
return;
}
}
}
- __enable_irq();
+ __unmask_irq();
// we should never reach this point. If we get here, it means
// usb_rx_memory_needed was set greater than zero, but no memory
- // was actually needed.
+ // was actually needed.
usb_rx_memory_needed = 0;
usb_free(packet);
return;
endpoint--;
if (endpoint >= NUM_ENDPOINTS) return;
- __disable_irq();
+ __mask_irq();
//serial_print("txstate=");
//serial_phex(tx_state[endpoint]);
//serial_print("\n");
tx_last[endpoint]->next = packet;
}
tx_last[endpoint] = packet;
- __enable_irq();
+ __unmask_irq();
return;
}
tx_state[endpoint] = next;
b->addr = packet->buf;
b->desc = BDT_DESC(packet->len, ((uint32_t)b & 8) ? DATA1 : DATA0);
- __enable_irq();
+ __unmask_irq();
}
void _reboot_Teensyduino_(void)
{
// TODO: initialize R0 with a code....
- asm volatile("bkpt");
+ __asm__ volatile("bkpt");
}
table[index(0, RX, ODD)].addr = ep0_rx1_buf;
table[index(0, TX, EVEN)].desc = 0;
table[index(0, TX, ODD)].desc = 0;
-
+
// activate endpoint 0
USB0_ENDPT0 = USB_ENDPT_EPRXEN | USB_ENDPT_EPTXEN | USB_ENDPT_EPHSHK;
}
+#else // F_CPU < 20 MHz && defined(NUM_ENDPOINTS)
+
+void usb_init(void)
+{
+}
+#endif // F_CPU >= 20 MHz && defined(NUM_ENDPOINTS)