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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# e' v" u- d  m6 D4 \" |# F/ ]main文件:! v1 R$ I" X2 c; G1 G
interrupt void interrupt4(void)  # @; e- L  X8 K) k* ^* v0 s1 y
{
1 ^% b# o% y& ]! M8 R% E4 t  Uint32 sample;
; D+ ^7 r. S; b" ]' }8 w5 K, M/ a5 A; K4 o
  sample = input_sample(); // read L + R samples from ADC
7 ^+ c1 C5 R, _. F1 `  output_sample(sample);   // write L + R samples to DAC / _5 c+ U' H$ N; V' |
  return;
( d: l. u( t! u5 W8 G}
9 I' L8 ~6 R# U% E+ h6 {3 r
! \8 d! i" X. `8 |8 qint main( void )
. p9 g) Q+ i/ f5 L% \{+ M4 n$ B' @5 J, {! u6 x

- W- }4 d6 I1 b8 m0 S! Y/ z    /* Initialize BSL */
# \- b9 I5 i; a( y$ ]+ S7 v    EVMC6747_init( );
# \/ q- v$ T  G2 s5 C        /* Call evmc6747_intr function */; a* R" s. \! h4 l$ G* j8 q
    aic3106_init( );  }5 q4 ~7 F% f$ m' a
        while(1);
( d! J  \* X2 Q2 ]0 X8 F}
8 y, K0 h7 S9 ~" S' _" G  A% M4 S$ U8 d, M( h" Q3 t# V
+ B& T9 C# M* Q5 l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# m* j0 z; a) d3 }5 H/* Initialize MCASP1 */" z" T, W" q! J1 I
    mcasp = &MCASP_MODULE_1;* a; |8 K5 H- v9 x+ i
    mcasp->regs->GBLCTL  = 0;       // Reset
$ W4 b/ B6 |6 p( l/ R" Y: q    mcasp->regs->RGBLCTL = 0;       // Reset RX+ G# l& U1 \4 P5 D
    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 p) @8 e- Z" g: n) {) ?* k+ u    mcasp->regs->PWRDEMU = 1;       // Free-running
6 A" @  F* {- q6 n8 E# b3 T   // configure McASP0 receive registers$ q" N3 R( G9 r* z
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 }. o- ?3 W5 q
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 r0 s, U+ b. l$ s& n7 \
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( X7 U/ c4 ~  u' T# W, e
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, |# ~. b* W& I# U0 m! W. O    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% _' O8 b; l5 \* S    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
" H5 A7 \$ q7 f( Y, x2 t+ D8 C    mcasp->regs->RINTCTL    = 0x00000000; // Not used! {3 L! K/ R/ B8 L  N
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% t8 d$ [. l6 ^; L, [
, }& Y8 i# ]( G; V
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 S4 P3 `7 z# Z& ~8 n* [    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 O. Q4 Q9 M0 P8 z( x3 z! Y2 M& T    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 [, W# |  z6 k& _1 n    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 L0 g0 x7 G# P
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( U: `9 N7 w; d
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 l5 s) J' f( ]" F5 c" V
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ T3 h8 e; {  d1 F
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ r) e: {2 a6 N, ]3 o0 c, J; L" Q  Z$ L+ m
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
% k. A5 f, ^0 \    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
- {  K. p% S* N8 w9 G" K& ]    mcasp->regs->PFUNC      = 0;          // All MCASPs
( O) \# P- `9 q% b& k" T, A: @+ A    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 p  T* r! |$ Y) F, p; [
3 ~+ N7 G5 y' N  J  {    mcasp->regs->DITCTL     = 0x00000000; // Not used; B$ W# Y( j4 S$ B% v2 v
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 j' |+ F2 ?& s0 n! u: \3 G    mcasp->regs->AMUTE      = 0x00000000; // Not used3 T& e" o9 J2 V2 A/ D
: }; K3 Q% a. ~, x
/* Starting sections of the McASP*/
0 e" W, U3 v: B. Z2 \# _+ `    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; v( s+ W; b: V& R/ P8 L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- ]* r* y7 R9 d    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 O# R& C) l" y* l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 x: `* `( H7 ?, v
& F* I3 q% c+ {0 K0 V6 |2 T
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % ^/ }2 d$ w3 N' a* o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 k; J1 N$ u9 J6 y4 k7 A    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . A& L7 X9 S! t9 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- M3 q9 \9 t  S) X# H8 U

7 D1 Q# Q7 @; `0 V* z  b% m    mcasp->regs->XSTAT = 0x0000ffff; . S0 i9 \! p9 P6 _4 W& D
    mcasp->regs->RSTAT = 0x0000ffff;
4 \3 Y! `' @7 b6 E% J1 P9 i5 c+ ^
8 W& K: F# W; \    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& n# B; G5 t, \1 Q. o( a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 D5 _3 k6 K+ v9 d
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . j$ r0 M- U; ]4 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 D2 [- H  M% D/ U0 H. @& E  c( z
' k' t7 h6 M  l" N$ t. w$ Y    /* Write a 0, so that no underrun occurs after releasing the state machine */0 w0 F- K6 r# ^4 E
    mcasp->regs->XBUF5 = 0;) x; n! t- M: q" k4 q
    mcasp->regs->RBUF0 = 0;0 S- k( n+ Q* ~3 u

/ i+ q0 E, d% l/ S* W( S# ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 h0 T$ \0 D8 A; z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( [" b/ i% P4 p; I2 H" g
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + K0 G: s. `( O1 t" K4 A0 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( p0 w# |  _! e/ d: h/ r% v2 i5 _+ \# l
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( M7 H( \4 C' D- Y5 D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) p+ e" U1 ]* b( t3 V( n( k
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 {" \$ s! |# S$ g% |6 G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) ~. E* ^0 c2 U) `  l( x  G) U- T0 r  ^% v& q
    CSR = 0x0000;2 q9 w8 E2 |* o; p' T2 t' t% O- n* v
    INTC_INTMUX1 = 0x3d;4 A8 |) v# X9 R% E& {7 p! F% G
    ISTP = (unsigned int)vectors;3 C1 P) r; G! X; `  M9 Q  x
    ICR = 0xFFF0;  
0 |: m; m9 F4 F) p) t8 A    IER |= 0x12;  " P  D8 V- N+ O- a3 R* }5 R
    CSR |= 0x01;  9 y8 C8 u3 N3 U2 P8 o

8 A6 ?; s% A$ @; K6 X: L4 Z  [4 A. `3 s
$ Y- w  D, T. K/ q
还有就是两个输入输出函数:
1 k! I" |% N' z: J: ?4 W# w7 \void output_sample(Int32 out_data)
, Z* c) Q) J6 J8 ^{6 J, I! z- S0 m6 h1 S$ N
  AIC31_data.uint = out_data;    Y# ?) A/ v7 k6 J
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 d# z, b. p3 l4 v0 V0 o5 c5 O# W" [}; P6 o' s  T0 N/ `3 R9 a" R

8 T0 t- L5 d6 h3 V2 N' [3 }Int32 input_sample(void)
' D; C6 g( \; Y5 z1 R{  
* g: p2 c, r' b  AIC31_data.uint = MCASP1_RBUF0_32BIT;( \+ p2 t5 M! @, M% B
  return (AIC31_data.uint);
" G  `1 d# G7 a; ]& }" i}
' C* g( V% a" g. z( _5 y% p# a+ O1 K. P  V4 I
分享到:  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, 2025-12-4 00:47 , Processed in 0.038688 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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