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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 ?: H% D* I, @2 Y- ]
main文件:
1 Y# ~0 @; D  c4 U; }, F) y7 |6 Rinterrupt void interrupt4(void)  ) B% |$ T6 ^- n( i4 n. q1 l& U+ K( y$ @5 K
{
3 X; T  b' G) v  Uint32 sample;
, x: ]( h  x/ `6 x7 ^3 t4 \5 y) c  M7 m: N! M, O: D8 t3 H( J/ f
  sample = input_sample(); // read L + R samples from ADC
, f* T$ j* h% F. P3 ^; u  output_sample(sample);   // write L + R samples to DAC
  i; Q4 }/ j3 z  return;) P2 g1 R8 w: |! R' |% g
}7 N6 \% d' ~- S
0 y4 g- {$ N0 r) x* p6 d
int main( void )& o1 h& \0 a. L* m- i) ?. R
{
2 }. S. |; l. p& x! U
# g! F! D! [1 G, y6 O+ d8 t    /* Initialize BSL */
. r+ g8 k4 Q+ Q# |: f. M    EVMC6747_init( );
! X+ e' x" _$ e2 K' k4 Y$ H* E; _9 f        /* Call evmc6747_intr function */
2 j: c7 ]+ m) F    aic3106_init( );
4 H4 W* Y# M/ r5 [3 @) }        while(1);# p% j4 p6 h8 B: w4 E3 U8 L8 x7 J
}
8 G0 n9 |: I" @2 j& M9 \
! h) Y( r& a9 _3 {+ f  m5 @+ n5 [: c6 A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) V$ K* L0 V; [) B- F0 [2 c/* Initialize MCASP1 */
$ [2 L& l: z. v- K% }# V% _8 y1 H    mcasp = &MCASP_MODULE_1;
& r( H* e; z6 r    mcasp->regs->GBLCTL  = 0;       // Reset  c- \  [. m  [5 Y, a
    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 i# m7 i3 G- G# u    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 w( E- T% u8 M. A. m    mcasp->regs->PWRDEMU = 1;       // Free-running; P+ v4 D! o7 \) l6 c1 E
   // configure McASP0 receive registers; c& m/ g5 z# Q; w$ I! n! k
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 t; B( W: d+ z8 `/ \! n9 C    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: I, V! X" |9 Y1 O    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 K0 k; e8 x3 g. e
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, N6 M" K: |1 X# a: X( A/ R    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 `, j( H4 e" d: y4 L+ v9 c
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; A! Y5 g2 Z8 l' c/ i9 l    mcasp->regs->RINTCTL    = 0x00000000; // Not used
' ~# _+ O& P( J2 V+ V1 w. [    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 w# ]4 e* g$ R# \! ^! K/ Y

2 ]8 y/ B% V2 g3 C) O    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 m. n0 N9 w2 K
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" |+ T9 _1 p5 p1 j8 Z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ V  s, o8 @. ~. u# ]" c    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; y  K! R, f1 V: V4 e0 T8 F    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
4 q; a0 v1 x4 p; y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ t& J5 [9 ]  I4 a    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ {/ p4 t+ `6 d( H1 s/ H3 _* Z* O% g
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 w( w# ~+ h; b7 E2 x0 v4 j/ n5 x1 ^4 E2 E1 ]9 b
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
' b9 L2 t# b$ {" w% T: m: a    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ x* B5 t, W9 b
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- r( C# v, Q. o6 w+ V  Z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' j- t9 q: O' P& s; {
. s) E5 e# p1 S2 m8 [0 @* D    mcasp->regs->DITCTL     = 0x00000000; // Not used2 Z* Q) Y+ f0 C% v
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' J- @/ z/ ?/ F: U* p2 o    mcasp->regs->AMUTE      = 0x00000000; // Not used
" f6 _8 r( M0 E8 Y* s
+ U9 A5 t8 j: R8 Q4 O* w/* Starting sections of the McASP*/. t3 }/ D, m; E: E( |, ?2 A, |4 C
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , Q7 D; z/ N- Q; t8 O$ e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . G( W; Y3 e2 t. X- N
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: C3 Q4 z5 E; N4 }2 R/ N) ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) z! U4 Z' J5 z/ I; b' [  X! `
) X# `4 Z4 J. \- T    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& S: S! O5 ^& E. ?% e5 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 k. i' D3 t1 h4 T6 I    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* q' M& ~, l- d5 i" x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ f: F; Z: C, Q# S, }- ^

* f  \( D% _$ U1 q+ I. ]# m    mcasp->regs->XSTAT = 0x0000ffff; ' }; ^7 [! X' S# w) z
    mcasp->regs->RSTAT = 0x0000ffff;
, Z4 ]5 c' L0 ~% l; D5 ^% o4 |9 o% R( E9 T0 D2 a
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 \: y$ L' F  I. r% @! P5 @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 z5 H# w# x2 @+ s
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) x% o: S% S7 t0 ~, @: A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; C0 K, R- ^+ }& H6 @" z, _

, I0 e" w# d+ ]0 Y7 F1 u    /* Write a 0, so that no underrun occurs after releasing the state machine */- K9 T5 q8 q* j4 T3 K3 x
    mcasp->regs->XBUF5 = 0;
6 H/ a8 ]1 L4 ~9 k6 P( h, P    mcasp->regs->RBUF0 = 0;# t; G8 @' ^: `: i, w7 M
8 F" k4 S) x0 n
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 a# b/ |7 U) ?4 C4 u8 r3 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, z+ Q' Z  x/ x  n+ j    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! D- J, b4 U. O" J  V: @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" X4 m( L/ E4 _8 {

  u; O/ D# y8 z+ Y, @    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' |/ ]; o4 N$ H4 X) c/ V# u% R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 a# V" L5 V- t- G8 F$ V    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! a- F5 x, o; `6 X. I7 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' R$ |; a$ v; J

7 p" R, u  Z. |7 o" k    CSR = 0x0000;
' N; u) o& W* a) x5 M0 U    INTC_INTMUX1 = 0x3d;
0 p# l2 u. }7 D3 t' h" @  L/ m    ISTP = (unsigned int)vectors;
( {9 b3 J1 B* k! s0 b    ICR = 0xFFF0;  4 n; G1 a- F8 o
    IER |= 0x12;  
+ P# L! D( k  `4 c, u9 w4 _    CSR |= 0x01;  
. M6 g8 n$ Y: R& N$ O5 k
; ^( V& u+ d! W/ r, A3 ?
: `: E+ p: J% w, ^3 c' C: U7 C0 w9 y1 u6 {; m
还有就是两个输入输出函数:  H8 j! v1 [& c- b- ?
void output_sample(Int32 out_data)2 c% I$ ^0 x& s" I& E
{! _0 i. `1 G; {
  AIC31_data.uint = out_data;  # C, ]9 p/ ~5 L5 X! f. L) t% o
  MCASP1_XBUF5_32BIT = AIC31_data.uint;; |/ \7 x6 ]) `: a, t7 c5 ?- U* z
}
% n1 P, b" Z0 f; Q8 C& z1 U( u9 [  \4 K
Int32 input_sample(void)
! S  Q0 O' x  p/ O: i; P{  
( A9 @$ K% J1 E  N8 m  AIC31_data.uint = MCASP1_RBUF0_32BIT;* a, ]. P7 r5 w. l1 Q  ?5 J& d
  return (AIC31_data.uint);
! U# O! h8 {# d1 F& N; Y* b}
2 M& N  {# k* L# m* m8 t
- K" X) g+ l" G( j7 b8 r$ G0 j. ^
分享到:  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-3 01:55 , Processed in 0.042996 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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