C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6640|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" e  d3 k3 ]- w
main文件:
9 i$ J- m* |) A. Q. t/ \5 K) V4 U2 E2 _interrupt void interrupt4(void)  
- A3 J1 u& d/ ]7 r) _1 I/ B0 {  i7 F{% E) t8 Q. f) n; w5 g
  Uint32 sample;" q, R$ v1 q9 X. L+ Q( ~
! k" L3 Z3 @% M! P
  sample = input_sample(); // read L + R samples from ADC
5 y6 D9 m3 e( Q) Z1 B8 ]2 v+ k  output_sample(sample);   // write L + R samples to DAC 1 U; [/ r$ E1 z" H7 U3 B. }8 g8 w
  return;. g+ w1 o9 |# c
}
; |( H4 B( W8 f5 ?/ Z) L; |$ G) n$ |
int main( void )0 H8 G2 f7 a+ G
{
# L: ^) A. }' B4 }
5 F- X$ I4 M7 c% W) T2 _    /* Initialize BSL */
' I; E, ]! E* k+ N* Q    EVMC6747_init( );; {3 k' p% G8 V$ S1 c
        /* Call evmc6747_intr function */9 U3 w' G5 a5 ?# x0 R
    aic3106_init( );
7 O% t' l1 T# \/ }7 m% ]. I: s9 T. I; J        while(1);
5 ~9 H' O# H+ ~- }6 A# A9 W}* B$ G1 ?3 f& J- {- Z
  p6 B8 Q! Y( {  |& `5 c3 l+ k

- m/ ]2 T2 R5 r' N. r: L6 Q! faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 ?2 U6 D6 f$ J  ^- f/* Initialize MCASP1 */
6 u4 a- ~6 h$ K( \2 j6 }' W/ K! U    mcasp = &MCASP_MODULE_1;( f/ y; H. a) N& k& m  h
    mcasp->regs->GBLCTL  = 0;       // Reset
9 `: K. D& T1 D8 W    mcasp->regs->RGBLCTL = 0;       // Reset RX/ X: t7 G5 A. ?& \
    mcasp->regs->XGBLCTL = 0;       // Reset TX6 X9 ?  N5 {% }$ E
    mcasp->regs->PWRDEMU = 1;       // Free-running
; V) D7 w# G6 m% {4 J' w1 @- }# a   // configure McASP0 receive registers
% {  e* t( }6 M2 k    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% C( s" N( `: [0 z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 |: W+ T' h$ }. R% u5 I, r
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' f9 J; ~  k( e    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 R' u4 n8 A, l" q2 f8 I
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 g( `8 @4 I. D5 S) C- @5 C    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1" i; M2 G  J$ ^# Q
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 v. N" Z8 I/ F    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, T, Z5 s9 d( z8 ~( N+ i9 d# q" i2 W% t$ G% D
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" L4 E0 E: U6 j. G  P% L. B3 q" _$ L
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; _, `" ]% R- {) i  y  ]6 L5 n4 i    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! e' F$ [" o5 `+ j! W
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; r) M  p$ L9 q7 f+ I' q0 B
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ _0 [9 x% }2 ^2 L7 R* `$ K    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
2 l4 b- }, y: |+ w4 Q    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 F7 X4 ^$ L$ ^    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 u; ?' z2 K" s& P  F

, U9 c! y: @4 [4 f1 y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: ^9 m2 W4 X7 B3 T$ I0 d    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 A" A; b2 y# Y6 D. C: J+ N    mcasp->regs->PFUNC      = 0;          // All MCASPs$ q6 S2 S* y2 k# D$ l
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. I3 _" S' q0 U* L; a9 }6 Q; b* ^" T
    mcasp->regs->DITCTL     = 0x00000000; // Not used8 M: S* l6 ]* U! @- g; Z
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
8 M+ [7 g  p5 w1 Q- K2 \$ z- I    mcasp->regs->AMUTE      = 0x00000000; // Not used! K6 B4 ^& b$ O  S$ D4 T! ]
. |$ {' d- F: Y" F
/* Starting sections of the McASP*/2 T# Q% {1 ?- f5 S% k; l; i5 l
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 h. n! e5 k/ s* L1 W3 U% h2 y/ n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 f2 ~7 t4 X( ]% k% h    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 C  u1 i8 F$ Y7 X8 b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 C0 L4 m( {! k6 o3 o# u! q7 B. H
6 B" [; \4 ], M  n" p8 t* Y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 U  z0 ^7 ~: k% R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 ?* m# S* V8 A" }( o
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" K0 o2 ~7 f+ b1 ?: f0 y! O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& V1 _9 Z: v8 ?' Y( W) n/ U

4 P* Q3 \6 ^+ v/ |6 f    mcasp->regs->XSTAT = 0x0000ffff; , U' n6 J% s, ^9 J8 h# g
    mcasp->regs->RSTAT = 0x0000ffff; 0 v: H- k* y9 D# S0 @. p, A- ?7 Y
; Y+ A2 a) b' r0 a+ A0 ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ j4 {, p* m, x7 v* d9 o4 M' {( F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; S7 y5 x5 O. ~. }1 g    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( I; i' h) e- a0 j6 Q9 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% w; R) \" h, a+ s4 L9 K9 C" w% {4 [6 P/ _3 H7 O2 m
    /* Write a 0, so that no underrun occurs after releasing the state machine */
" F2 Z5 Y7 G7 i    mcasp->regs->XBUF5 = 0;
( p& v1 e4 S: b/ K; N: b  f4 x) L    mcasp->regs->RBUF0 = 0;7 y- ^0 ^6 U, J4 H6 Y# B4 h) @1 U4 D

/ f* o- {2 M$ n1 J    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 z0 \- u( A' r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# j0 `4 {# x( j
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. q8 b" ~0 A0 s' L$ |, m% b9 V0 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  m2 m( ^, a8 C9 z6 ~3 A
5 ~. j& R# u( J9 s5 }/ c" e) E    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ u. I; {8 k7 R5 l. B0 p4 C8 T& a" b9 u- P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ W# n( u7 d& K- \0 p
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( @$ {$ @( q% z& a- q0 }, E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 `0 i9 x2 ^; _' J# n. G

9 u# U+ L6 b( `- {5 i6 r. ~    CSR = 0x0000;' h1 c% r  w" s  u
    INTC_INTMUX1 = 0x3d;" R! f9 X0 U  |- a! p
    ISTP = (unsigned int)vectors;! f. H+ q- K/ h% w0 w
    ICR = 0xFFF0;  " e7 e0 \. j3 k. O
    IER |= 0x12;  + E$ {$ m7 U4 Z" q: }! F
    CSR |= 0x01;  
. l( Y1 b3 _0 c, T: t$ o& R& L2 U% k0 P- z8 B: \
/ P7 g6 D- A8 W9 R) t1 }
0 @" H9 h$ h* D; X9 C
还有就是两个输入输出函数:
7 Q3 ^0 Q# x! X7 ovoid output_sample(Int32 out_data)" F0 x+ W1 m; |' M5 G. X
{$ Y+ J% c" }, }8 @. k( D' Z
  AIC31_data.uint = out_data;  
4 z) S; I0 c, ]- k9 l7 Q  MCASP1_XBUF5_32BIT = AIC31_data.uint;* b! R9 M# @1 f3 Q( k1 F/ X2 k
}5 `+ D- t* l8 N; P1 {7 G: Y
  D- @  e' h) A2 s7 O2 T
Int32 input_sample(void)
% z; B8 r: r) c9 ^$ r& j{  
4 o1 c4 h7 f8 r! g( ]! T  AIC31_data.uint = MCASP1_RBUF0_32BIT;
' w* X% F! P' V  return (AIC31_data.uint);* ~; r) R* p# u* e7 [
}
9 Z4 q* |6 W6 p8 Y/ I; m
5 n# r" c. X- |$ S! k! P/ p; P3 ?# V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-25 03:13 , Processed in 0.044817 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表