#include #include #include #include #include #include #include #define PWMC (*(volatile unsigned char*)0xfffff501) #define PWMS0 (*(volatile unsigned char*)0xfffff502) #define PWMS1 (*(volatile unsigned char*)0xfffff503) #define PWM_ENABLE 0x10 #define PWM16KHZ 0x01 #define PWM32KHZ 0x00 #define PWMREP2 0x04 #define NSAMPLE 10240 #define DT 62.5e-6 char WaveTable[NSAMPLE]; int main(int argc, char* argv[]) { int i; int fd, rs; if (1 < argc) { fd = open(argv[1], O_RDONLY); if (0 > fd) { perror(argv[1]); exit(1); } } else { printf("rplay [file]\n"); exit(1); } /* PWMC = PWM_ENABLE | PWM32KHZ | PWMREP2;*/ PWMC = 0x14; while (1) { rs = read(fd, WaveTable, NSAMPLE); for (i = 0; i < rs; i++) { while (!(0x20 & PWMC)) ; PWMS1 = WaveTable[i++]; if (i >= NSAMPLE) i = 0; } if (rs == 0) { PWMC = 0x0; exit(0); } } }