summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/mpeg.c52
1 files changed, 31 insertions, 21 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index c5f036c860..ce348f45f3 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -647,42 +647,52 @@ static void dma_tick(void)
647 else 647 else
648 { 648 {
649 int i; 649 int i;
650 int num_bytes = 0; 650 int num_bytes;
651 if(is_recording && (PBDR & 0x4000)) 651 if(is_recording && (PBDR & 0x4000))
652 { 652 {
653#ifdef DEBUG 653#ifdef DEBUG
654 timing_info[timing_info_index++] = current_tick; 654 timing_info[timing_info_index++] = current_tick;
655 TCNT2 = 0; 655 TCNT2 = 0;
656#endif 656#endif
657 for(i = 0;i < 30 && (PBDR & 0x4000);i++) 657 if(inverted_pr)
658 { 658 {
659 if(inverted_pr) 659 for(i = 0;PBDR & 0x4000;i++)
660 {
660 PADR |= 0x800; 661 PADR |= 0x800;
661 else 662
663 /* It must take at least 5 cycles before
664 the data is read */
665 mp3buf[mp3buf_write++] = *(unsigned char *)0x4000000;
666
662 PADR &= ~0x800; 667 PADR &= ~0x800;
663 668
664 /* It must take at least 5 cycles before the data is read */ 669 if(mp3buf_write >= mp3buflen)
665 mp3buf[mp3buf_write] = *(unsigned char *)0x4000000; 670 mp3buf_write = 0;
666 671 }
667 if(inverted_pr) 672 }
673 else
674 {
675 for(i = 0;PBDR & 0x4000;i++)
676 {
668 PADR &= ~0x800; 677 PADR &= ~0x800;
669 else 678
679 /* It must take at least 5 cycles before
680 the data is read */
681 mp3buf[mp3buf_write++] = *(unsigned char *)0x4000000;
682
670 PADR |= 0x800; 683 PADR |= 0x800;
671 684
672 /* It must take at least 4 cycles before the next loop */ 685 if(mp3buf_write >= mp3buflen)
673 num_rec_bytes++; 686 mp3buf_write = 0;
674 687 }
675 mp3buf_write++;
676 if(mp3buf_write >= mp3buflen)
677 mp3buf_write = 0;
678
679 num_bytes++;
680 } 688 }
681#ifdef DEBUG 689#ifdef DEBUG
682 timing_info[timing_info_index++] = TCNT2 + (num_bytes << 16); 690 timing_info[timing_info_index++] = TCNT2 + (i << 16);
683 timing_info_index &= 0x3ff; 691 timing_info_index &= 0x3ff;
684#endif 692#endif
685 693
694 num_rec_bytes += i;
695
686 /* Signal to save the data if we are running out of buffer 696 /* Signal to save the data if we are running out of buffer
687 space */ 697 space */
688 num_bytes = mp3buf_write - mp3buf_read; 698 num_bytes = mp3buf_write - mp3buf_read;
@@ -1626,7 +1636,7 @@ static void mpeg_thread(void)
1626 close(mpeg_file); 1636 close(mpeg_file);
1627 mpeg_file = -1; 1637 mpeg_file = -1;
1628 1638
1629#if 0 1639#ifdef DEBUG
1630 { 1640 {
1631 int i; 1641 int i;
1632 for(i = 0;i < 512;i++) 1642 for(i = 0;i < 512;i++)