C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 V1 ]6 l# R' o2 n& k$ W! umain文件:
) L. q2 i% l- s. \( _6 b6 zinterrupt void interrupt4(void)  - Z- K* [' ]- u
{
' e+ S+ ]' T: i, d. m  H3 p  Uint32 sample;
& x" b$ N; v6 f6 V  s, Y; i5 D- u( `2 @9 F/ z  d
  sample = input_sample(); // read L + R samples from ADC
8 i( F4 M  O( d( x  output_sample(sample);   // write L + R samples to DAC
0 Y; x' l7 e- A2 U. r: m5 l  return;  f( k% v0 D* r
}% S( {- V; F7 ^; T

5 w& @% H' \3 N7 _7 [1 o4 _( d+ m' O  pint main( void )) B0 ]$ v2 V! p* `4 C# z. A
{
. f) ^% g* t5 A. R8 J- Q5 q  o; h0 R$ F  V, X
    /* Initialize BSL */
( U$ n5 f% }* U; s$ W6 J; ?    EVMC6747_init( );8 p$ W  c& b; x/ z, {$ U2 |% L
        /* Call evmc6747_intr function */; n* e5 {9 f, x+ N1 Q
    aic3106_init( );
; J1 W( e$ i" k        while(1);
, m! h4 }/ i1 d9 q& \3 `0 j1 t# P& @}) A( G2 P! U# ^% I8 {! s2 j: p, R
" l' K0 _4 @% p4 E- [6 M; N! A
$ g! K! N& ]( k3 ~: v; j
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 b: u/ T+ ?/ Q1 n' N. V/* Initialize MCASP1 */
% R1 c# x* d: ~# E9 _$ J    mcasp = &MCASP_MODULE_1;
) e+ q  C6 u7 ]) Y+ G. v& p8 m    mcasp->regs->GBLCTL  = 0;       // Reset
1 Q0 S. m6 \1 O+ S4 @% d" ?/ x! F8 O    mcasp->regs->RGBLCTL = 0;       // Reset RX
& W- x' z$ q8 k7 C8 n    mcasp->regs->XGBLCTL = 0;       // Reset TX; D; L/ T: a% o( A
    mcasp->regs->PWRDEMU = 1;       // Free-running% }" G( h; v; F4 q, v% S4 e
   // configure McASP0 receive registers
9 I- E) g: `# W    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 F& h" {: F" d* ~$ i0 @" T
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: B; e9 Y( r: J7 D+ R& d6 a
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, c6 l$ L8 s& V+ k" j0 M    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 J& z( u! @: K2 o; p
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 ]# u. [+ z9 Z- ]% c  M1 I$ I    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% S& n# j6 ?0 k  {7 b
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 s/ \" C6 n( b9 n! D    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: Q" L3 S" K8 ^/ n! q6 T2 b

: Q5 Y& Q3 P- @9 K/ w! L    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 R& E2 v6 e7 P! Y
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) \1 o7 E9 Q9 W& z8 r
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. u0 Q1 M3 m3 D: [$ K    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 b- q0 ^+ Q) w. ]' U$ K! x    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK# q% R! b  h( `" f5 P
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( ?, G. v" M3 l5 C, w( x' b    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 s% G" [* c& }0 ?& C: |
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 ^9 V2 q/ H! ], r% W# \: q
1 \' g# s7 Z9 V. f8 I1 i5 `    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 u" q: [  t6 N7 `- @    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, n( j/ l7 y9 b) B3 U- z5 h    mcasp->regs->PFUNC      = 0;          // All MCASPs
( Y2 W7 p& S* w" t    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, F4 e6 M5 H/ g0 u" q5 Z

9 r& _5 U# o- P* C. R    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ L. G+ m3 t. `6 V/ y    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 i$ ^% b& e9 n9 x& @  X
    mcasp->regs->AMUTE      = 0x00000000; // Not used' Y" i  _: ]; Z1 v+ R+ v

9 w  w  s/ [. i$ E5 W/* Starting sections of the McASP*/5 A- d5 [" z. _2 G% I# }
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: S$ S: D8 }/ ?( K4 a6 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . h# ^# V2 b! O0 L
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 f+ y4 Z2 ]- }6 \5 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 H  _7 x% L, x" _$ v3 g
8 m( n/ p& v! f. `8 i# B
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) u! s% {+ _+ @4 C2 g1 e+ a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 A7 l: A6 M0 i    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* |; K! L9 f! ^' U' f! h2 m# x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 d' T8 E4 w) A5 G% }$ W: X9 v4 Y
    mcasp->regs->XSTAT = 0x0000ffff; ' |! t# m; X5 w
    mcasp->regs->RSTAT = 0x0000ffff;
* O; |6 R- r9 P- D6 L6 J4 G3 {
" @- \& G* `6 K% p. B/ I% R    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; W" `; E4 R( M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, H( e9 h+ {  i
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : E- i1 |4 i& o# @4 u) y# X5 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 k' @4 K6 b% @, [6 I; f) y' E  D
' N1 X9 S# r& p' H% n; M7 O# n
    /* Write a 0, so that no underrun occurs after releasing the state machine */
( _3 C' |) n( y# r& V    mcasp->regs->XBUF5 = 0;7 w' Z9 H& ?1 [# G! H
    mcasp->regs->RBUF0 = 0;
" S) w1 n0 T( K/ A, T) c
% b0 S, S7 U+ W: K. x8 E    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / I' R! U* I/ i5 q) \$ W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% \% w! R8 a* v% r! M
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( ^# ]3 ?" r. S* j, I9 k6 `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; O. E8 S, E( v. r( |/ Q% A, D

, Y: v" y4 p: z7 x4 O9 i& M% _0 Y    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + w% y& F; A. L6 Y' T+ \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 x0 M$ k2 N3 g3 p9 S3 a    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 g( b" M/ k4 C9 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! {% C5 k3 C9 l% [2 I2 @$ P, h" }( d1 F2 G3 j
    CSR = 0x0000;
( d( I+ e4 D0 W+ y$ R6 P: J  c    INTC_INTMUX1 = 0x3d;! g$ j/ Y* ~8 O6 h( L
    ISTP = (unsigned int)vectors;) v6 \  m# Y4 M. _
    ICR = 0xFFF0;  % L/ L& h/ }& L" f
    IER |= 0x12;  7 a" ?1 c$ J( A; ~4 J$ q
    CSR |= 0x01;  
: `" D( t3 q2 U/ h1 z$ }  z3 r4 }
9 |+ U) p6 i5 p! ]
6 I9 f, b# f9 c4 v0 `1 \% ]9 N& G; ?" i% T" J: K
还有就是两个输入输出函数:
( J$ g% B3 k3 x& g9 B% Jvoid output_sample(Int32 out_data)
+ d8 w0 L' T3 F4 G7 a{0 E) e0 g( i& Y. i
  AIC31_data.uint = out_data;  . m* M1 C1 i) Q+ g: v3 h
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( a! r, R% y/ W* T; V}, h( E1 [; Y- s2 [4 ?

" Z4 s* z# Z* gInt32 input_sample(void)9 f+ V) \- {2 V# ~1 S* E8 M
{  6 u1 {1 d9 b3 m6 S; t
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; Q; J: z$ ?7 ]9 ]# G( u7 G  return (AIC31_data.uint);
- X- D+ `( V7 i1 }( @" N}& P8 q8 S7 J& f5 Z: R; N. `

7 t3 f) ~; q2 M2 k- j  a. K
分享到:  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-1-10 08:13 , Processed in 0.039875 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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